ASP.Net MVC授权操作过滤器

时间:2009-01-29 11:29:42

标签: asp.net asp.net-mvc

我正在尝试了解在MVC预览4中使用授权[授权]操作过滤器时错误处理的工作原理。

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

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

当我访问网址:http://localhost:2197/testAuthorisation/NeedAuthorisation时,我的浏览器中会出现一个空白页面。在Firebug中,我可以看到已发出请求并返回了401 - Unauthorised的响应状态。但我没有被重定向或返回了customError。使用我授权的角色时,一切都按预期工作。

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

3 个答案:

答案 0 :(得分:11)

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

  

当您尝试调用控制器操作时,会发生什么   没有正确的权限取决于类型   验证启用。默认情况下,使用ASP.NET开发时   服务器,你只需要一个空白页面。该页面提供401 Not   授权的HTTP响应状态。

答案 1 :(得分:0)

如果您将CustomErrors设置为Off或RemoteOnly,那么您将不会被重定向到HandleError指定的页面(默认为Error.aspx)。将其设置为“开”,然后看看会发生什么。但是,您明确指定的任何自定义错误页面都会优先,因此您需要删除它们,并且只需:

<customErrors mode="On" />

答案 2 :(得分:0)

您需要在相应的视图文件夹中显示错误视图,即您需要文件Views/TestAuthorization/Error.aspx才能显示任何内容。

您还可以通过您想要使用的视图以及您希望触发的异常来customize this行为。

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