using Apewer.Network; using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Globalization; using System.IO; using System.Net; using System.Security.Cryptography.X509Certificates; using System.Text; namespace Apewer.Web { /// <summary>请求。</summary> public sealed class MiniRequest : IToJson { /// <summary>上下文。</summary> public MiniContext Context { get; private set; } #region connection internal bool Http11 = false; /// <summary>要求保持连接。</summary> public bool KeepAlive { get; internal set; } #endregion #region headers HttpHeaders _headers = new HttpHeaders(); /// <summary>头部。</summary> public HttpHeaders Headers { get => _headers; } /// <summary>统一资源定位。</summary> public Uri Url { get; internal set; } /// <summary>请求方法。</summary> public string Method { get; internal set; } /// <summary>URL 路径。</summary> public string Path { get; internal set; } /// <summary>HTTP 协议版本。</summary> public string Version { get; internal set; } /// <summary>客户端可接受 Brotli 压缩。</summary> public bool Brotli { get; internal set; } /// <summary>客户端可接受 Gzip 压缩。</summary> public bool Gzip { get; internal set; } /// <summary>内容长度,单位:字节。</summary> public long ContentLength { get => _headers.GetValue("Content-Length").Int64(); } #endregion #region /// <summary>请求体的流。</summary> public Stream Body { get => Context.Connection.GetRequestStream(); } #endregion /// <summary></summary> internal MiniRequest(MiniContext context) { Context = context; } /// <summary>专用的序列化方法。</summary> public Json ToJson() { var json = new Json(); json.SetProperty("Method", Method); json.SetProperty("Path", Path); json.SetProperty("Url", Url?.OriginalString); json.SetProperty("Headers", Json.From(Headers)); return json; } } }