2026-05-11 14:35:34 +08:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Avalonia_Services.Core
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 抽象的请求上下文,屏蔽不同宿主(ASP.NET Core / Desktop WebView)的差异。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class ServiceEndpointContext
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 请求路径,例如 "api/wData"
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Path { get; init; } = string.Empty;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// HTTP 方法(GET, POST, PUT, DELETE 等)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Method { get; init; } = "GET";
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 请求头
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public Dictionary<string, string> Headers { get; init; } = new(StringComparer.OrdinalIgnoreCase);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 请求体(原始字符串)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? Body { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询参数
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public Dictionary<string, string> Query { get; init; } = new(StringComparer.OrdinalIgnoreCase);
|
|
|
|
|
|
|
2026-05-22 11:42:38 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 路由路径参数。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public Dictionary<string, string> RouteValues { get; init; } = new(StringComparer.OrdinalIgnoreCase);
|
|
|
|
|
|
|
2026-05-11 14:35:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 响应状态码
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int StatusCode { get; set; } = 200;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 响应状态描述
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string StatusMessage { get; set; } = "OK";
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 响应头
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public Dictionary<string, string> ResponseHeaders { get; set; } = new(StringComparer.OrdinalIgnoreCase)
|
|
|
|
|
|
{
|
|
|
|
|
|
["Content-Type"] = "application/json; charset=utf-8"
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 响应体
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public object? ResponseBody { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 存储在请求生命周期中的任意数据(由中间件/过滤器使用)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public Dictionary<string, object?> Items { get; init; } = new();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取请求头值
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? GetHeader(string key)
|
|
|
|
|
|
{
|
|
|
|
|
|
return Headers.TryGetValue(key, out var value) ? value : null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 设置响应头
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public void SetResponseHeader(string key, string value)
|
|
|
|
|
|
{
|
|
|
|
|
|
ResponseHeaders[key] = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|