3

在我正在构建的 ASP.NET MVC 站点中,我有一些方法,使用它们的用户必须处于某个角色(碰巧,如果他们不是,则意味着他们已从站点中暂停) . 为此,我使用该[Authorize(Roles="RoleName")]属性没有任何困难。

但是,我不太明白没有通过该[Authorize]检查的用户会发生什么?他们展示了什么?

如果他们尝试使用这些方法,我想将暂停的用户重定向到不同的操作。现在,我一直在使用一个空白[Authorize]属性(没有指定任何角色),然后在操作代码中检查用户是否是角色的一部分。

我的方法对我来说就像一种代码味道。如果他们没有通过[Authorize]检查,是否可以指定向用户显示什么(或将他们重定向到哪里)?

4

2 回答 2

4

AuthorizeAttribute MSDN 页面所述:

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

如果您正在使用表单身份验证并希望重定向到登录页面,则无需执行任何操作。否则实现你自己IAuthorizationFilter的重定向。

编辑:请参阅这篇博客文章,该文章基本上手动重新实现了 AuthorizeAttribute,并带有自定义重定向。

于 2010-06-20T15:37:22.757 回答
1

如果您不想实现自己的 IAuthorizationFilter 我相信您应该能够覆盖 Authorize 属性的默认行为。只需继承并覆盖HandleUnauthorizedRequest方法。当然,您仍然需要一种方法来确定用户是否由于未登录或没有正确权限而失败。编写自己的授权过滤器可能会更干净。

于 2010-06-21T03:23:50.520 回答