代码之家  ›  专栏  ›  技术社区  ›  Lewis

ASP.NET MVC授权操作筛选器

  •  10
  • Lewis  · 技术社区  · 16 年前

    我试图理解在MVC预览4中使用authorize[authorize]操作过滤器时错误处理是如何工作的。

    我有一个动作看起来像这样:

    [Authorize(Roles = "DOMAIN\\NOTAUTHORISED_ROLE" )]
    [HandleError]
    public ActionResult NeedAuthorisation()
    {
        throw new NotImplementedException();
    }
    

    当我访问URL时: http://localhost:2197/testAuthorisation/NeedAuthorisation ,我的浏览器中有一个空白页。在Firebug中,我可以看到请求已发出,响应状态为 401 - Unauthorised 已返回。但是我没有被重新定向或者让客户返回错误。当使用我授权的角色时,一切都按预期工作。

    这正在使用Windows身份验证。我正在编写一些代码来尝试表单身份验证,看看我是否也遇到同样的问题。 我有 <customerrors mode="On"/> 在tesauthorisation文件夹和shared文件夹中设置并创建了错误页。

    3 回复  |  直到 9 年前
        1
  •  11
  •   Sir Crispalot    11 年前

    我最终发现 this MVC tutorial 解决了我的问题:

    当您试图调用控制器操作时会发生什么 如果没有正确的权限,则取决于 已启用身份验证。默认情况下,在使用ASP.NET开发时 服务器,您只需得到一个空白页。这一页是401的,不是 授权HTTP响应状态。

        2
  •  0
  •   Keith Williams    16 年前

    如果将customErrors设置为off或remoteOnly,则不会重新定向到handleError指定的页面(默认值为error.aspx)。把它设为“开”,然后看看会发生什么。但是,您显式指定的任何自定义错误页都将优先,因此您需要删除这些错误页,并且只具有:

    <customErrors mode="On" />

        3
  •  0
  •   Community CDub    8 年前

    在相应的视图文件夹中需要一个错误视图,即需要该文件 Views/TestAuthorization/Error.aspx 为了让任何东西出现。

    你也可以 customize this 通过您想要使用的视图和您想要触发它的异常来进行行为。

    [HandleError(ExceptionType = typeof(SqlException), View = "DatabaseError")]]
    [HandleError(ExceptionType = typeof(NullReferenceException), View = "LameErrorHandling")]]