如何在ActionFilterAttribute中强制请求失败

Ala*_*aya 2 asp.net-core-mvc asp.net-core

我有一个继承的类ActionFilterAttribute.

它解密了调用者加密的请求中的一些查询字符串属性.这可以确保我的WebAPI方法只接收"好"参数.这很好用.

如果参数未加密,我需要做的并且没有成功的是否定/失败上下文(请求).

如何强制终止请求?我正在做我的逻辑:

public override void OnActionExecuting(ActionExecutingContext context)
Run Code Online (Sandbox Code Playgroud)

已经尝试将响应设置为401,但这不起作用:

//Negate the access by default
 context.HttpContext.Response.StatusCode = 401;
Run Code Online (Sandbox Code Playgroud)

Set*_*Set 5

  1. 正如克林特B所说,其中一种方法是使用中间件. 以下是有关中间件的ASP核心文档以及操作方法示例

  2. 另一方面,如果您使用MVC并希望使用ActionFilter强制停止MVC操作,则可以通过将Action Context .Result属性设置为非null值来执行此操作.

例:

actionContext.HttpContext.Response.StatusCode = 401;
actionContext.HttpContext.Response.Headers.Clear();

actionContext.Result = new EmptyResult();
//var wrongResult = new { error = "Wrong parameters"};
//actionContext.Result = new JsonResult(wrongResult);
Run Code Online (Sandbox Code Playgroud)

如何选择Middleware和Action过滤器?操作过滤器可以仅用作MVC HTTP请求的方法过滤器,控制器过滤器或全局过滤器.

中间件是"坐在"HTTP管道上并检查所有请求和响应的组件.

  1. 对于请求参数验证,您可以使用数据注释.