.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 =>
            {
                //
            });

        }

  

 

posted @ 2022-07-20 10:53  PanPan003  阅读(85)  评论(0编辑  收藏  举报