可以在自定义 AuthorizeAttribute 中抛出 HttpException(401) 吗?
Is ist ok to throw a HttpException(401) in custom AuthorizeAttribute?
我有一个自定义的 AuthorizeAttribute:
public class MyAuthAttribute:AuthorizeAttribute {
protected override bool AuthorizeCore(HttpContextBase httpContext) {
return CurrentUser.Roles.Contains(this.Roles);
}
}
现在 return Currentuser.Roles
工作得很好。如果它 return 为假,浏览器将显示 401。
但我想添加其他信息,例如要求的角色。因此,我会自己抛出一个异常,而不是 return:
throw new httpException(401,string.Format("User should have been in one of the following roles: {0}",this.Roles);
是否可以在 AuthorizeAttribute 中抛出 401 异常而不是 returning false?或者是否有其他(更好的)方法可以将该信息发送到浏览器?
如果您要发送 401,则只需发送带有 WWW-Authenticate
header 的普通 401(如果您未使用使用 WWW-Authenticate
的身份验证形式,则401 是完全不合适的)。如果您想提供额外的信息,请在与该 401 一起出现的自定义 HTML 响应的 body 中提供(仅当用户取消身份验证提示时才会显示)。
对于您可以做某事但选择不允许特定用户这样做的任何其他情况,请使用 403。
我有一个自定义的 AuthorizeAttribute:
public class MyAuthAttribute:AuthorizeAttribute {
protected override bool AuthorizeCore(HttpContextBase httpContext) {
return CurrentUser.Roles.Contains(this.Roles);
}
}
现在 return Currentuser.Roles
工作得很好。如果它 return 为假,浏览器将显示 401。
但我想添加其他信息,例如要求的角色。因此,我会自己抛出一个异常,而不是 return:
throw new httpException(401,string.Format("User should have been in one of the following roles: {0}",this.Roles);
是否可以在 AuthorizeAttribute 中抛出 401 异常而不是 returning false?或者是否有其他(更好的)方法可以将该信息发送到浏览器?
如果您要发送 401,则只需发送带有 WWW-Authenticate
header 的普通 401(如果您未使用使用 WWW-Authenticate
的身份验证形式,则401 是完全不合适的)。如果您想提供额外的信息,请在与该 401 一起出现的自定义 HTML 响应的 body 中提供(仅当用户取消身份验证提示时才会显示)。
对于您可以做某事但选择不允许特定用户这样做的任何其他情况,请使用 403。