如果我的ASP.NET MVC 3(Razor)Web应用程序中有 Area ,那么所有控制器都来自一个如下所示的基本控制器:
[Authorize(Roles="Administrator")]
public class AdminController : Controller
{
}
当非管理员尝试访问该区域中的URL时,会将其重定向到web.config中指定的登录页面。
但是,如果用户已经过身份验证,而不是管理员,则这没有任何意义。在那种情况下,我们不应该返回HTTP 401吗?
我的问题基本上是人们如何处理这个问题 - 他们是否创建了自定义授权属性?
答案 0 :(得分:2)
看到这个帖子...... ASP.Net converts 401 to 302 error codes
您真正想要做的是返回403代码。 401用于认证挑战。 ASP.NET表单授权拦截401并将用户推送到登录页面。
如果你还想做401,你能描述一下最终用户的预期体验吗?
答案 1 :(得分:1)
我使用ASP.NET MVC4 Beta,今天我注意到如果我将ReturnUrl
参数添加到querystring,则表单模块不会更改响应。
因此,如果操作i / Rate具有属性[Authorize]
,那么
<a href="/xm/i/Rate?pid=3&count=2&ReturnUrl=%2F">..</a>
返回401.我不知道它是bug还是功能,但现在它的工作原理如上所述。
答案 2 :(得分:0)
我们为这些场景设置了自定义过滤器属性,我们将用户带到自定义错误页面
public void OnAuthorization(AuthorizationContext filterContext) {
if(//user does not have permission){
filterContext.Result = new RedirectResult("/Error/AccessDenied");
}
答案 3 :(得分:0)
如果未经授权的用户尝试访问使用Authorize属性标记的方法,则MVC框架将返回401 HTTP状态代码。如果站点配置为使用ASP.NET表单身份验证,则401状态代码会导致浏览器将用户重定向到登录页面。
Refrence:http://msdn.microsoft.com/zh-tw/library/system.web.mvc.authorizeattribute.aspx
其他类似问题:How to intercept 401 from Forms Authentication in ASP.NET MVC?