2009-01-29 106 views
10

我试图理解错误处理在MVC预览使用授权[授权]操作过滤器时,是如何工作的4ASP.Net MVC授权行为过滤

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

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

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

这是使用Windows身份验证。我正在编写一些代码来尝试表单身份验证,看看我是否得到相同的问题。 我有<customerrors mode="On"/>集,并在testAuthorisation文件夹和共享文件夹中创建了错误页面。

回答

11

我终于找到this MVC tutorial这解决了我的问题:

究竟是什么,当你试图调用一个控制器动作 没有被正确的权限发生取决于启用 身份验证的类型。默认情况下,当使用ASP.NET Development 服务器时,您只需获得一个空白页面。该页面的授权HTTP响应状态为401 Not 。

0

如果您将CustomErrors设置为Off或RemoteOnly,那么您将不会被重定向到由HandleError指定的页面(默认为Error.aspx)。将其设置为“开”,然后看看会发生什么。明确指定的任何自定义错误页将优先考虑,然而,你需要删除这些了,刚才:

<customErrors mode="On" />

+0

谢谢,但我已设置customErrors。这不是帮助 – Lewis 2009-01-29 13:36:14

0

您需要在相应的视图文件夹中的错误观点,即你需要的文件Views/TestAuthorization/Error.aspx为了有什么东西出现。

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

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

谢谢,但我已经有错误视图,我有一个在共享文件夹。两者都像我所期望的那样工作(例如,当我从该方法抛出NotImplementedException时)。 – Lewis 2009-01-29 13:40:19