请求中间件和筛选器
Closed this issue · 2 comments
vipwan commented
internal interface IQuickApiMiddlewareHandler
{
/// <summary>
/// 请求QuickApi前的操作
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
Task InvokeBeforeAsync(HttpContext context);
/// <summary>
/// 请求QuickApi后的操作
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
Task InvokeAfterAsync(HttpContext context);
}
/// <summary>
/// QuickApiMiddleware
/// </summary>
public sealed class QuickApiMiddleware
{
private readonly RequestDelegate _next;
public QuickApiMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
var md = context.GetEndpoint()?.Metadata.GetMetadata<QuickApiMetadata>();
if (md == null || md.QuickApiType == null)
{
await _next(context);
return;
}
var handler = context.RequestServices.GetRequiredService(md.QuickApiType) as IQuickApiMiddlewareHandler;
if (handler == null)
{
await _next(context);
return;
}
await handler.InvokeBeforeAsync(context);
await _next(context);
await handler.InvokeAfterAsync(context);
}
}
vipwan commented
提供 QuickApi执行管道的前和执行请求后的 中间件支持 :
[QuickApi("middleware")]
public class MiddlewareApi : BaseQuickApi
{
public override Task InvokeBeforeAsync(HttpContext context)
{
return base.InvokeBeforeAsync(context);
}
public override Task InvokeAfterAsync(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.WriteAsync("middleware");
return Task.CompletedTask;
}
public override RouteHandlerBuilder HandlerBuilder(RouteHandlerBuilder builder)
{
builder.WithTags("custom");
return base.HandlerBuilder(builder);
}
}
vipwan commented
筛选器请重写 RouteHandlerBuilder 添加:
public override RouteHandlerBuilder HandlerBuilder(RouteHandlerBuilder builder)
{
//自定义筛选器
builder.AddEndpointFilter(async (context, next) =>
{
context.HttpContext.Response.Headers.TryAdd("X-Powered-By", "Biwen.QuickApi");
Console.WriteLine("自定义过滤器!");
return await next(context);
});
return base.HandlerBuilder(builder);
}
推荐使用筛选器AddEndpointFilter替代执行管道(IQuickApiMiddlewareHandler)的行为.