操作过滤器无法阻止控制器中的未经授权的请求
Action Filter Unable To Block An Unauthorized Request in Controller
我试图阻止控制器中的请求,如果它在 header 中没有特定值。所以我使用一些指导方针做了以下事情:
public class InvalidTokenAttribute : Attribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
var Authorization = context.HttpContext.Request.Headers["test"];
if (Authorization != "12345678910")
{
context.ModelState.AddModelError("Authorization", "Authorization failed!");
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
}
当我在特定控制器中使用属性并将 Console.WriteLine() 放入自定义属性 class 时,它起作用并得到确认。但不幸的是,它不会在控制器级别抛出任何异常。我做了如下事情:
请求:
GET http://localhost:PortNo/WeatherForecast/GetAllTeams
test: "12345678"
控制器:
[HttpGet]
[InvalidToken]
public async Task<ActionResult<IEnumerable<TeamDetails>>> GetAllTeams()
{
string Token = Request.Headers["test"];
return Ok(Token);
}
使用该属性,它不应进入控制器,因为 header 值无效或不匹配。不幸的是,值在控制器中返回并显示输出。有什么我错过的吗?
当Authorization != "12345678910"
时,你的动作过滤器只是添加一个ModelError,它不会中断请求。所以,如果你不想让它进入控制器,你可以添加一些代码,如:
过滤器
public class InvalidTokenAttribute : Attribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
var Authorization = context.HttpContext.Request.Headers["test"];
if (Authorization != "12345678910")
{
context.ModelState.AddModelError("Authorization", "Authorization failed!");
//you can add this code to Interrupt request,So request will not get into controller
context.Result = new BadRequestObjectResult(context.ModelState);
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
}
我试图阻止控制器中的请求,如果它在 header 中没有特定值。所以我使用一些指导方针做了以下事情:
public class InvalidTokenAttribute : Attribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
var Authorization = context.HttpContext.Request.Headers["test"];
if (Authorization != "12345678910")
{
context.ModelState.AddModelError("Authorization", "Authorization failed!");
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
}
当我在特定控制器中使用属性并将 Console.WriteLine() 放入自定义属性 class 时,它起作用并得到确认。但不幸的是,它不会在控制器级别抛出任何异常。我做了如下事情:
请求:
GET http://localhost:PortNo/WeatherForecast/GetAllTeams
test: "12345678"
控制器:
[HttpGet]
[InvalidToken]
public async Task<ActionResult<IEnumerable<TeamDetails>>> GetAllTeams()
{
string Token = Request.Headers["test"];
return Ok(Token);
}
使用该属性,它不应进入控制器,因为 header 值无效或不匹配。不幸的是,值在控制器中返回并显示输出。有什么我错过的吗?
当Authorization != "12345678910"
时,你的动作过滤器只是添加一个ModelError,它不会中断请求。所以,如果你不想让它进入控制器,你可以添加一些代码,如:
过滤器
public class InvalidTokenAttribute : Attribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
var Authorization = context.HttpContext.Request.Headers["test"];
if (Authorization != "12345678910")
{
context.ModelState.AddModelError("Authorization", "Authorization failed!");
//you can add this code to Interrupt request,So request will not get into controller
context.Result = new BadRequestObjectResult(context.ModelState);
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
}