using System.Collections.Generic; using System.Net; namespace EmbedIO { /// /// Provides standard HTTP status descriptions. /// Data contained in this class comes from the following sources: /// /// RFC7231 Section 6 (HTTP/1.1 Semantics and Content) /// RFC6585 (Additional HTTP Status Codes) /// RFC2774 Section 7 (An HTTP Extension Framework) /// RFC7540 Section 9.1.2 (HTTP/2) /// RFC4918 Section 11 (WebDAV) /// RFC5842 Section 7 (Binding Extensions to WebDAV) /// RFC7538 Section 3 (HTTP Status Code 308) /// RFC3229 Section 10.4.1 (Delta encoding in HTTP) /// RFC8297 Section 2 (Early Hints) /// RFC7725 Section 3 (HTTP-status-451) /// RFC2295 Section 8.1 (Transparent Content Negotiation) /// /// public static class HttpStatusDescription { private static readonly IReadOnlyDictionary Dictionary = new Dictionary { { 100, "Continue" }, { 101, "Switching Protocols" }, { 102, "Processing" }, { 103, "Early Hints" }, { 200, "OK" }, { 201, "Created" }, { 202, "Accepted" }, { 203, "Non-Authoritative Information" }, { 204, "No Content" }, { 205, "Reset Content" }, { 206, "Partial Content" }, { 207, "Multi-Status" }, { 208, "Already Reported" }, { 226, "IM Used" }, { 300, "Multiple Choices" }, { 301, "Moved Permanently" }, { 302, "Found" }, { 303, "See Other" }, { 304, "Not Modified" }, { 305, "Use Proxy" }, { 307, "Temporary Redirect" }, { 308, "Permanent Redirect" }, { 400, "Bad Request" }, { 401, "Unauthorized" }, { 402, "Payment Required" }, { 403, "Forbidden" }, { 404, "Not Found" }, { 405, "Method Not Allowed" }, { 406, "Not Acceptable" }, { 407, "Proxy Authentication Required" }, { 408, "Request Timeout" }, { 409, "Conflict" }, { 410, "Gone" }, { 411, "Length Required" }, { 412, "Precondition Failed" }, { 413, "Request Entity Too Large" }, { 414, "Request-Uri Too Long" }, { 415, "Unsupported Media Type" }, { 416, "Requested Range Not Satisfiable" }, { 417, "Expectation Failed" }, { 421, "Misdirected Request" }, { 422, "Unprocessable Entity" }, { 423, "Locked" }, { 424, "Failed Dependency" }, { 426, "Upgrade Required" }, { 428, "Precondition Required" }, { 429, "Too Many Requests" }, { 431, "Request Header Fields Too Large" }, { 451, "Unavailable For Legal Reasons" }, { 500, "Internal Server Error" }, { 501, "Not Implemented" }, { 502, "Bad Gateway" }, { 503, "Service Unavailable" }, { 504, "Gateway Timeout" }, { 505, "Http Version Not Supported" }, { 506, "Variant Also Negotiates" }, { 507, "Insufficient Storage" }, { 508, "Loop Detected" }, { 510, "Not Extended" }, { 511, "Network Authentication Required" }, }; /// /// Attempts to get the standard status description for a . /// /// The HTTP status code for which the standard description /// is to be retrieved. /// When this method returns, the standard HTTP status description /// for the specified if it was found, or /// if it was not found. This parameter is passed uninitialized. /// if the specified was found /// in the list of HTTP status codes for which the standard description is known; /// otherwise, . /// /// public static bool TryGet(HttpStatusCode code, out string description) => Dictionary.TryGetValue((int)code, out description); /// /// Attempts to get the standard status description for a HTTP status code /// specified as an . /// /// The HTTP status code for which the standard description /// is to be retrieved. /// When this method returns, the standard HTTP status description /// for the specified if it was found, or /// if it was not found. This parameter is passed uninitialized. /// if the specified was found /// in the list of HTTP status codes for which the standard description is known; /// otherwise, . /// /// public static bool TryGet(int code, out string description) => Dictionary.TryGetValue(code, out description); /// /// Returns the standard status description for a . /// /// The HTTP status code for which the standard description /// is to be retrieved. /// The standard HTTP status description for the specified /// if it was found, or if it was not found. public static string Get(HttpStatusCode code) { Dictionary.TryGetValue((int)code, out var description); return description; } /// /// Returns the standard status description for a HTTP status code /// specified as an . /// /// The HTTP status code for which the standard description /// is to be retrieved. /// The standard HTTP status description for the specified /// if it was found, or if it was not found. public static string Get(int code) { Dictionary.TryGetValue(code, out var description); return description; } } }