我有一个应用程序,其中一些用户属于一个角色,但实际上可能无法访问URL中的某些数据。例如,下面的网址是开放给所有用户如何显示已验证但未经授权的用户未经授权的页面MVC 3?
/Library/GetFile/1
然而,一些用户可能无法访问文件1,但我不能使用授权属性来检测。我希望将这些用户重定向到未经授权或访问权限的页面。我使用窗体身份验证和我的配置设置这样
<authentication mode="Forms">
<forms loginUrl="~/Home/Index" timeout="2880" />
</authentication>
我的自定义错误块就是这个样子
<customErrors mode="On" defaultRedirect="Error" redirectMode="ResponseRewrite" >
<error statusCode="401" redirect="Unauthorized"/>
</customErrors>
我试图返回HttpUnauthorizedResult如果用户没有访问权限,但我只是重定向到登录页面,这在这里是无效的,因为用户已经被认证。
看来,HttpUnauthorizedResult被设置HTTP响应代码401窗体身份验证劫持和发送用户到登录页面。
投掷UnauthorizedAccessException似乎并没有工作,要么始终将用户重定向到一个IIS错误页面,即使我已经更新了我RegisterGlobalFilters到
filters.Add(new HandleErrorAttribute
{
ExceptionType = typeof(UnauthorizedAccessException),
View = "Unauthorized",
Order = 3
});
如果我改变UnauthorizedAccessException到自定义异常重定向作品现在这就是我所做的。
最后,这是我做的除了2件事情。我没有创建自定义HandleErrorAttribute,只需在RegisterGlobalFilters方法的第二个HandleError过滤器上设置ExceptionType和Order。我喜欢你的'安全'扩展名的想法!我可能会更多地使用这个想法。 – Steven
@Steven,我打算放弃一个属性,只注册标准的HandleError过滤器,但我注意到你只能指定一个View。由于我正在使用区域,所以我需要明确地说明我的控制器。 –