Dart HttpStatus
最后修改于 2025 年 4 月 4 日
Dart 中的 HttpStatus
类提供了 HTTP 状态码的常量。它是 dart:io
库的一部分,对于 Web 开发和 HTTP 通信至关重要。
HttpStatus 包含所有标准 HTTP 状态码的数字常量。这些代码指示 HTTP 响应中的成功、失败或其他条件。
基本定义
HttpStatus
是一个包含静态整数常量的实用工具类。每个常量都用描述性名称表示一个标准的 HTTP 状态码。
该类涵盖了从信息性 (1xx) 到服务器错误 (5xx) 的所有状态码。使用这些常量可以提高代码的可读性和可维护性。
检查成功状态
此示例演示了如何检查 HTTP 响应是否表示成功。
import 'dart:io'; void main() { int statusCode = 200; if (statusCode >= HttpStatus.ok && statusCode < HttpStatus.multipleChoices) { print('Request succeeded'); } else { print('Request failed'); } print('OK status code: ${HttpStatus.ok}'); }
我们检查状态码是否在成功范围 (200-299) 内。HttpStatus.ok 常量表示 200,这是标准的成功代码。
$ dart main.dart Request succeeded OK status code: 200
处理重定向
此示例展示了如何识别不同类型的重定向响应。
import 'dart:io'; void handleRedirect(int statusCode) { switch (statusCode) { case HttpStatus.movedPermanently: print('301 - Moved Permanently'); break; case HttpStatus.found: print('302 - Found'); break; case HttpStatus.seeOther: print('303 - See Other'); break; case HttpStatus.temporaryRedirect: print('307 - Temporary Redirect'); break; case HttpStatus.permanentRedirect: print('308 - Permanent Redirect'); break; default: print('Not a redirect'); } } void main() { handleRedirect(HttpStatus.movedPermanently); handleRedirect(HttpStatus.temporaryRedirect); }
我们使用 HttpStatus 常量来标识特定的重定向类型。每次重定向对客户端如何处理它都有不同的影响。
$ dart main.dart 301 - Moved Permanently 307 - Temporary Redirect
错误处理
此示例演示了如何处理不同的 HTTP 错误状态。
import 'dart:io'; String getErrorMessage(int statusCode) { if (statusCode == HttpStatus.badRequest) { return '400 - Bad Request'; } else if (statusCode == HttpStatus.unauthorized) { return '401 - Unauthorized'; } else if (statusCode == HttpStatus.forbidden) { return '403 - Forbidden'; } else if (statusCode == HttpStatus.notFound) { return '404 - Not Found'; } else if (statusCode >= HttpStatus.internalServerError) { return '5xx - Server Error'; } else { return 'Unknown error'; } } void main() { print(getErrorMessage(HttpStatus.notFound)); print(getErrorMessage(HttpStatus.internalServerError)); }
我们使用 HttpStatus 常量来标识特定的客户端和服务器错误。该函数根据状态码返回适当的错误消息。
$ dart main.dart 404 - Not Found 5xx - Server Error
创建 HTTP 响应
此示例展示了在创建 HTTP 服务器响应时如何使用 HttpStatus。
import 'dart:io'; void handleRequest(HttpRequest request) { try { // Process request request.response.statusCode = HttpStatus.ok; request.response.write('Success'); } catch (e) { request.response.statusCode = HttpStatus.internalServerError; request.response.write('Error: $e'); } finally { request.response.close(); } } void main() async { var server = await HttpServer.bind('localhost', 8080); print('Server running on port 8080'); await for (var request in server) { handleRequest(request); } }
我们使用 HttpStatus 常量在 HTTP 响应中设置适当的状态码。这确保了标准的合规性以及客户端对响应的更好处理。
$ dart main.dart Server running on port 8080
验证状态码
此示例演示了如何验证 HTTP 状态码范围。
import 'dart:io'; String getStatusCategory(int statusCode) { if (statusCode < HttpStatus.continue_ || statusCode > 599) { return 'Invalid status code'; } else if (statusCode < HttpStatus.ok) { return 'Informational'; } else if (statusCode < HttpStatus.multipleChoices) { return 'Success'; } else if (statusCode < HttpStatus.badRequest) { return 'Redirection'; } else if (statusCode < HttpStatus.internalServerError) { return 'Client Error'; } else { return 'Server Error'; } } void main() { print('200: ${getStatusCategory(200)}'); print('404: ${getStatusCategory(404)}'); print('500: ${getStatusCategory(500)}'); }
我们使用 HttpStatus 常量将状态码分类到标准的 HTTP 范围内。该函数有助于理解任何有效状态码的总体含义。
$ dart main.dart 200: Success 404: Client Error 500: Server Error
最佳实践
- 使用常量:始终优先使用 HttpStatus 而不是魔术数字
- 范围检查:验证代码是否符合标准范围
- 文档:在文档中包含状态码的含义
- 错误处理:为每个代码提供适当的响应
来源
本教程介绍了 Dart 的 HttpStatus 类,并提供了实际示例,展示了状态码处理、验证和 HTTP 服务器响应创建。
作者
列出 所有 Dart 教程。