我有一个应用程序,其中一些用户属于某个角色,但实际上可能无法访问 URL 中的某些数据。例如以下网址对所有用户开放
/Library/GetFile/1
但是,某些用户可能无法访问 file1,但我无法使用 Authorize 属性来检测它。相反,我想将这些用户重定向到未经授权或拒绝访问的页面。我正在使用表单身份验证,我的配置是这样设置的
<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,表单身份验证正在劫持并将用户发送到登录页面。
即使我已将 RegisterGlobalFilters 更新为
filters.Add(new HandleErrorAttribute
{
ExceptionType = typeof(UnauthorizedAccessException),
View = "Unauthorized",
Order = 3
});
如果我将 UnauthorizedAccessException 更改为自定义异常,则重定向有效,现在这就是我所做的。