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