我有一个继承ActionFilterAttribute
的课程。
它解密了调用者加密的Request中的一些查询字符串属性。这可以确保我的WebAPI方法只接收“好”参数。这很有效。
如果参数未加密,我需要做的并且没有成功的是否定/失败上下文(请求)。
如何强制终止请求? 我正在做我的逻辑:
public override void OnActionExecuting(ActionExecutingContext context)
已经尝试将响应设置为401,但这不起作用:
//Negate the access by default
context.HttpContext.Response.StatusCode = 401;
答案 0 :(得分:5)
正如Clint B所说,其中一种方法是使用中间件。 Here是关于中间件的ASP核心文档,其中包含操作示例
另一方面,如果您使用MVC并希望使用ActionFilter强制停止MVC操作,则可以通过将Action Context .Result
属性设置为非空值来执行此操作。
示例:
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);
如何在Middleware和Action过滤器之间进行选择?操作过滤器可用作方法过滤器,控制器过滤器或全局过滤器仅用于MVC HTTP请求。
中间件是“坐在”HTTP管道上的组件,用于检查所有请求和响应。
答案 1 :(得分:1)
在ASP.NET Core中执行此操作的方法是编写自定义中间件。只是在请求期间设置响应状态代码将不起作用。因为当请求到达生成响应的中间件时,状态代码将被覆盖。
如果您在中间件中执行此操作,则可以在此处停止请求并发回401响应。
编辑:
我在GitHub上发布了一个教程项目,演示了如何通过三个简单的步骤创建具有依赖注入的自定义中间件。我还没有将它转换为RC2,但你不必运行它来学习如何做到这一点。这很简单。阅读自述文件,它解释了如何搜索相关区域的代码。您可以下载项目here。