我已经在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();
});
}
}
答案 0 :(得分:0)
ActionFilterAttribute抽象类包含以下方法来覆盖:
void OnActionExecuted(ActionExecutedContext filterContext)
void OnActionExecuting(ActionExecutingContext filterContext)
void OnResultExecuted(ResultExecutedContext filterContext)
void OnResultExecuting(ResultExecutingContext filterContext)
在ActionExecutingContext
中使用OnActionExecuting
。
只需要修改OnActionExecuting
中的CustomAuthorize
。其他代码与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);
}
结果测试