.NET Core TODO: ActionFilterAttribute & IOperationFilter & HandlerMiddleware
.NET Core TODO: ActionFilterAttribute & IOperationFilter & HandlerMiddleware
ActionFilterAttribute
public class MyActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
//....
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
//....
}
}
//Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(o => {
o.Filters.Add(typeof(MyActionFilter));
}).AddJsonOptions(o =>
{
});
}
参考:wcf - Execute code before (EVERY) Web API action - Stack Overflow
HandlerMiddleware
public class XfhMiddleware
{
private readonly RequestDelegate _next;
//在应用程序的生命周期中,中间件的构造函数只会被调用一次
public XfhMiddleware(RequestDelegate next)
{
this._next = next;
}
public async Task InvokeAsync(HttpContext context)
{
// Do something...
await _next(context);
}
}
//startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiddleware<XfhMiddleware>();
}
参考:ASP.NET Core Middleware - 雪飞鸿 - 博客园 (cnblogs.com)
OperationFilter 给你的 API 添加或者删除参数:c# - How to selectively add OperationFilter to API endpoint in Swagger? - Stack Overflow
public class AuthenticationHeadersFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
operation.Parameters = new List<OpenApiParameter>();
operation.Parameters.Add(new OpenApiParameter
{
Name = "AccountName",
In = ParameterLocation.Header,
Required = true
});
operation.Parameters.Add(new OpenApiParameter
{
Name = "ApiKey",
In = ParameterLocation.Header,
Required = true
});
}
}
//startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
// ...
// other Swagger configurations
// ...
c.OperationFilter<AuthenticationHeadersFilter>();
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
//
});
}

浙公网安备 33010602011771号