Asp.net mvc 4 如何配置使用“授权(角色)”属性时发生的情况?

Asp.net mvc 4 如何配置使用“授权(角色)”属性时发生的情况?,asp.net-mvc-4,simplemembership,roleprovider,Asp.net Mvc 4,Simplemembership,Roleprovider,我有一个配置了simplemembership的MVC4项目。它的所有工作等,但我想知道如何告诉它的控制器/行动重定向到当一个用户没有被授权查看给定的页面 例如,如果我使用[Authorize(Roles=“Admin”)]并尝试使用没有“Admin”角色的登录用户查看该页面,则即使我已登录,也会将我重定向到登录页面 我想把这个换成别的。。。也许是一个404或一个很好的消息,说“你没有被授权查看该内容” 我试着用谷歌搜索我能想到的关于这个的一切,但到目前为止还没有找到答案 这可以通过当前设置完成

我有一个配置了simplemembership的MVC4项目。它的所有工作等,但我想知道如何告诉它的控制器/行动重定向到当一个用户没有被授权查看给定的页面

例如,如果我使用
[Authorize(Roles=“Admin”)]
并尝试使用没有“Admin”角色的登录用户查看该页面,则即使我已登录,也会将我重定向到登录页面

我想把这个换成别的。。。也许是一个404或一个很好的消息,说“你没有被授权查看该内容”

我试着用谷歌搜索我能想到的关于这个的一切,但到目前为止还没有找到答案


这可以通过当前设置完成,还是需要其他设置?如果指针指向正确的方向,我们将不胜感激:)

不幸的是,这是Asp.net作为一个整体存在的问题(尽管它源于HTTP规范中的一个问题),它没有区分未经授权的用户和未经授权的用户,尽管他们似乎特意谈论了这一区别。为了改变这种行为,您必须编写大量代码,编写自定义处理程序来检查您是否已经通过身份验证更容易

HTTP标准从未打算让用户处于“已验证状态”。事实上,它甚至不知道“用户”的概念。每个页面请求旨在独立于其他页面请求来携带信息。浏览器缓存此信息(或通过cookie进行身份验证)的事实与标准的意图无关

该标准基本上说,如果请求的资源未经授权,服务器应发出401,并且由于每个请求都有自己的授权,因此其意图是一个简单的通过/失败场景。现场没有授权状态的概念。请求要么成功,要么失败

我认为像ASP.NET这样的框架在创建自己的授权/身份验证状态方面已经走了很长的路,但是它们真的应该一直走到这里

您可能会发现,对于网络社区之间关于确切解释的分歧,这条线索很有启发性


尝试创建自定义页面并覆盖该方法,以便在授权失败时重定向到自定义页面,在身份验证失败时重定向到登录页面。有些人使用的另一种方法是检查当前用户是否已在登录页上通过身份验证,如果已通过身份验证,您可以假定他们已重定向到此页,因为授权失败。在这种情况下,向用户显示一条特殊消息,指示他们无权访问该页面。对于某些应用程序,这可能是有意义的,因为用户可能有多个帐户,并且他们希望登录到另一个有权执行操作的帐户。其中一些概念是。

我同意你在那里所说的一切,但不幸的是,它并没有真正回答问题;)。我只需要知道,当用户登录但未处于授权角色时,是否有方法告诉SimpleMembership/SimpleRoleProvider重定向到登录操作以外的其他操作?页面上的消息并不理想,但我猜它可以工作。在“每个用户一个帐户”应用程序中,我想你甚至可以隐藏登录表单,如果他们已经登录,则显示“未授权”消息。