Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 关于管理员的[授权]属性的问题_Asp.net Mvc_Security_Forms Authentication_Roles_Authorize Attribute - Fatal编程技术网

Asp.net mvc 关于管理员的[授权]属性的问题

Asp.net mvc 关于管理员的[授权]属性的问题,asp.net-mvc,security,forms-authentication,roles,authorize-attribute,Asp.net Mvc,Security,Forms Authentication,Roles,Authorize Attribute,如果我的ASP.NET MVC 3(Razor)Web应用程序中有一个区域,其中所有控制器都派生自一个基本控制器,如下所示: [Authorize(Roles="Administrator")] public class AdminController : Controller { } 当非管理员尝试访问该区域中的URL时,他们会被重定向到web.config中指定的登录页面 但是,如果用户已经过身份验证,但不是管理员,那么这就没有意义了。在这种情况下,我们不应该返回HTTP 401吗 我的

如果我的ASP.NET MVC 3(Razor)Web应用程序中有一个区域,其中所有控制器都派生自一个基本控制器,如下所示:

[Authorize(Roles="Administrator")]
public class AdminController : Controller
{

}
当非管理员尝试访问该区域中的URL时,他们会被重定向到web.config中指定的登录页面

但是,如果用户已经过身份验证,但不是管理员,那么这就没有意义了。在这种情况下,我们不应该返回HTTP 401吗


我的问题基本上是人们如何处理这个问题-他们是否创建自定义授权属性?

我们为此类场景提供了自定义授权过滤器属性,并将用户带到自定义错误页面

public void OnAuthorization(AuthorizationContext filterContext) {


if(//user does not have permission){

filterContext.Result = new RedirectResult("/Error/AccessDenied");

}

如果未经授权的用户试图访问标有Authorize属性的方法,MVC框架将返回401HTTP状态代码。如果站点配置为使用ASP.NET表单身份验证,401状态代码将导致浏览器将用户重定向到登录页面

参考文献:

其他类似问题:

请参阅此线程。。。

您真正想要做的是返回403代码。401用于身份验证挑战。ASP.NET表单授权拦截401并将用户推送到登录页面


如果您仍然想执行401,您能描述一下最终用户的预期体验吗?

我使用ASP.NET MVC4 Beta,今天我注意到,如果我将
ReturnUrl
参数添加到querystring,表单模块不会更改响应

因此,如果操作i/Rate具有属性
[Authorize]
,则

<a href="/xm/i/Rate?pid=3&amp;count=2&amp;ReturnUrl=%2F">..</a>


返回401。我不知道这是错误还是功能,但现在它可以正常工作。

是的,我想到了,但我真的不想返回页面。我想返回HTTP 401(通过IIS)是的,我想要401,但我不想要重定向。如果他们已通过身份验证,但未经授权,则不应将他们带到登录页面。我投票决定关闭此页面-因为我发现了另一个确切的问题:。虽然那是两年前的事了,但还是一样的问题吗?是的,同样的问题。顺便说一句,您可以编写自己的Authorize,并让它抛出一个包含401的
HttpException
。是的,这将不得不这样做。谢谢。对我来说听起来像个bug-我只是天真地将ReturnUrl添加到一个需要授权的URL中,我得到了401-你的答案帮助我-谢谢!我很高兴我的评论有帮助;)