从AuthorizeAttribute HandleUnauthorizedRequest返回子状态的http状态代码

时间:2014-11-13 14:06:08

标签: asp.net-mvc authentication authorize-attribute

如何从AuthorizeAttribute的继承者HandleUnauthorizedRequest返回子状态如403.7的http状态代码?我知道如何返回没有子状态的http状态代码:

protected override void HandleUnauthorizedRequest(AuthorizationContext ctx)
{
    ctx.Result = new HttpStatusCodeResult(403);
}

但我在HttpStatusCodeResult构造函数中找不到子状态代码。

[UPDATE] 我也尝试这个代码,但响应起始行看起来像#34; HTTP / 1.1 403 Forbidden" (不是HTTP / 1.1 403.7禁止):

 protected override void HandleUnauthorizedRequest(AuthorizationContext ctx)
 {
     ctx.HttpContext.Response.StatusCode = 403;
     ctx.HttpContext.Response.SubStatusCode = 7;
     ctx.HttpContext.Response.End();
 }

1 个答案:

答案 0 :(得分:2)

虽然设置子状态为possible,但该值永远不会传递给客户端,仅对日志记录等内容有用。

相反,您需要以另一种方式将数据提供给客户端。您可以使用响应正文,或者在这种情况下,我可能会设置一个您可以在客户端中读取的自定义HTTP标头:

ctx.HttpContext.Response.AddHeader("Status", "SomethingWentWrong");