0

我有一个自定义 AuthorizeAttribute:

public class MyAuthAttribute:AuthorizeAttribute {
 protected override bool AuthorizeCore(HttpContextBase httpContext) {
    return CurrentUser.Roles.Contains(this.Roles);
 }
}

现在return Currentuser.Roles效果很好。如果返回 false,浏览器会显示 401。

但我想添加额外的信息,如所要求的角色。因此,我会自己抛出异常,而不是 return:

throw new httpException(401,string.Format("User should have been in one of the following roles: {0}",this.Roles);

可以在 AuthorizeAttribute 中抛出 401-Exception 而不是只返回 false 吗?还是有其他(更好的)方法可以将该信息发送到浏览器?

4

1 回答 1

1

如果您要发送 401,则只需发送带有WWW-Authenticate标头的普通 401(如果您不使用使用的身份验证形式,WWW-Authenticate则 401 是完全不合适的)。如果您想提供额外信息,请在与该 401 一起使用的自定义 HTML 响应的正文中执行此操作(仅当用户取消身份验证提示时才会显示)。

对于您可以做某事但选择不允许特定用户这样做的任何其他情况,请使用 403。

于 2016-01-28T10:17:03.133 回答