简体   繁体   中英

Action Filter is not working in asp.net core Web API

I have created an action filter for HTTP request validation in ASP.NET Core 3.1 Web API.

Unfortunately it is not working. The problem has to be at controller level, because the same works in .NET Framework.

CustomAuthorize.cs

public class CustomAuthorize : ActionFilterAttribute
{
    private readonly IConfiguration _configuration;

    public CustomAuthorize(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public override void OnActionExecuting(HttpActionContext context)
    {
        string secrect = _configuration.GetSection("AuthJWT").GetSection("Secrect").Value;
        var request = context.Request.Headers.GetValues("AuthJWT").FirstOrDefault();
        //Add Validation code here
        base.OnActionExecuting(context);

    }
}

HomeController

[Route("[controller]")]
[ApiController]
[ServiceFilter(typeof(CustomAuthorize))]
public class HomeController : ControllerBase
{       
    [HttpGet("getdata")]
    public IActionResult GetData()
    {
        return Ok("Success");
    }
}

Startup.cs

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors();

        services.AddControllers();

        services.AddScoped<CustomAuthorize>();

    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

ActionFilterAttribute abstract class includes the following methods to override:

void OnActionExecuted(ActionExecutedContext filterContext)
void OnActionExecuting(ActionExecutingContext filterContext)
void OnResultExecuted(ResultExecutedContext filterContext)
void OnResultExecuting(ResultExecutingContext filterContext)

Use ActionExecutingContext in OnActionExecuting .

Only need to modify OnActionExecuting of CustomAuthorize . Other codes are same as u.

        public override void OnActionExecuting(ActionExecutingContext context)
        {
            string secrect = _configuration.GetSection("AuthJWT").GetSection("Secrect").Value;
            
            var request = context.HttpContext.Request.Headers["AuthJWT"].FirstOrDefault();
            //Add Validation code here
            base.OnActionExecuting(context);

        }

Test of result

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM