【问题标题】:Stop response at ActionFilterAttribute validation在 ActionFilterAttribute 验证时停止响应
【发布时间】:2013-12-05 11:37:28
【问题描述】:

我有一个 ActionFilterAttribute 并且在其 OnExecuting 事件中,我正在验证请求。 如果这不是授权请求,我正在做类似的事情:

if(notAuthorized){
  filterContext.HttpContext.AddError(new Exception("Invalid Request !!"));
}

因此,对于未经授权的请求,它会添加异常并继续执行操作。 我的问题是此时如何停止处理? 我试过了:

filterContext.HttpContext.Response.End();

但没有成功。请回复。

检查动作中的错误将是一个选项,但我正在寻找动作过滤器本身的变化,因此我们不需要在每个动作中进行更改。

【问题讨论】:

    标签: asp.net-mvc-4 actionfilterattribute


    【解决方案1】:

    只需设置filterContextResult即可:

    filterContext.Result = new HttpUnauthorizedResult("Invalid Request !!");
    

    如果您只想允许经过身份验证的用户访问,您最好使用Authorize 过滤器。

    更新:

    由于您想在授权失败时呈现错误视图,请尝试以下操作:

    filterContext.Result = new ViewResult
            {
            ViewName = "{YourErrorViewName}",
            ViewData = { Model = new Exception("Invalid Request !!") }
            }; 
    

    【讨论】:

    • 嗨,我刚试过,它返回给我登录视图。实际上,在这种情况下,我不应该返回登录视图(它是一组不同用户的单独控制器,通过 cookie 进行验证),相反,我可能想显示一个错误视图。感谢您快速回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多