Innovenergy_trunk/csharp/Lib/WebServer/HttpExtensions.cs

100 lines
2.7 KiB
C#

using System.Net;
using InnovEnergy.Lib.Utils;
namespace InnovEnergy.Lib.WebServer;
public static class HttpExtensions
{
public static String AsString(this ContentType t) => Types[(Int32) t];
public static IEnumerable<HttpHeader> ParseHeaders(this HttpListenerRequest req)
{
var headers = req.Headers;
return headers
.AllKeys
.EmptyIfNull()
.Select(k => new HttpHeader(k!, headers[k]!));
}
public static HttpMethod ParseMethod(this HttpListenerRequest request)
{
return request.HttpMethod.ToUpper() switch
{
"GET" => HttpMethod.Get,
"POST" => HttpMethod.Post,
"PUT" => HttpMethod.Put,
"PATCH" => HttpMethod.Patch,
"CONNECT" => HttpMethod.Connect,
"HEAD" => HttpMethod.Head,
"DELETE" => HttpMethod.Delete,
"OPTIONS" => HttpMethod.Options,
"TRACE" => HttpMethod.Trace,
_ => HttpMethod.Unknown
};
}
public static readonly IReadOnlyList<String> Types = new[]
{
"application/atom+xml",
"application/atomcat+xml",
"application/ecmascript",
"application/java-archive",
"application/javascript",
"application/json",
"application/mp4",
"application/octet-stream",
"application/pdf",
"application/pkcs10",
"application/pkcs7-mime",
"application/pkcs7-signature",
"application/pkcs8",
"application/postscript",
"application/rdf+xml",
"application/rss+xml",
"application/rtf",
"application/smil+xml",
"application/x-font-otf",
"application/x-font-ttf",
"application/x-font-woff",
"application/x-pkcs12",
"application/x-shockwave-flash",
"application/x-silverlight-app",
"application/xhtml+xml",
"application/xml",
"application/xml-dtd",
"application/xslt+xml",
"application/zip",
"audio/midi",
"audio/mp4",
"audio/mpeg",
"audio/ogg",
"audio/webm",
"audio/x-aac",
"audio/x-aiff",
"audio/x-mpegurl",
"audio/x-ms-wma",
"audio/x-wav",
"image/bmp",
"image/gif",
"image/jpeg",
"image/png",
"image/svg+xml",
"image/tiff",
"image/webp",
"text/css",
"text/csv",
"text/html",
"text/plain",
"text/richtext",
"text/sgml",
"text/yaml",
"video/3gpp",
"video/h264",
"video/mp4",
"video/mpeg",
"video/ogg",
"video/quicktime",
"video/webm",
};
}