我正在尝试了解在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"/>
并创建了错误页面。
答案 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")]]