操作过滤器在 asp.net 核心 Web API 中不起作用
Posted
技术标签:
【中文标题】操作过滤器在 asp.net 核心 Web API 中不起作用【英文标题】:Action Filter is not working in asp.net core Web API 【发布时间】:2020-07-23 15:59:14 【问题描述】:我为 ASP.NET Core 3.1 Web API 中的 HTTP 请求验证创建了一个操作过滤器。
不幸的是,它不起作用。问题必须在控制器级别,因为在 .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();
);
【问题讨论】:
我们需要看到过滤器的完整代码和验证码至少相关部分...... 它是如何“不工作”的......我们需要能够重现这一点。所以你需要为一个完全可重现的例子发布足够的代码和信息 【参考方案1】:ActionFilterAttribute 抽象类包括以下重写方法:
void OnActionExecuted(ActionExecutedContext filterContext)
void OnActionExecuting(ActionExecutingContext filterContext)
void OnResultExecuted(ResultExecutedContext filterContext)
void OnResultExecuting(ResultExecutingContext filterContext)
在OnActionExecuting
中使用ActionExecutingContext
。
只需要修改OnActionExecuting
的CustomAuthorize
。其他代码和你一样。
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);
结果测试
【讨论】:
@sambeet das 很高兴听到这个消息。您能否标记此答案以帮助他人。 :D以上是关于操作过滤器在 asp.net 核心 Web API 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ASP.NET 核心 mvc 向 asp.net 核心中的 Web API 发出 PUT 请求?
ASP.NET Web API路由系统:路由系统的几个核心类型