You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.3 KiB

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