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;
}
}
}