繁体   English   中英

如何沿着一些附加数据返回状态代码 401?

[英]How to return status code 401 along some additional data?

我正在尝试编写一个自定义 Authorize 属性来授权一些 API 端点和 MVC 操作。 按照这个 StackOverflow answer ,我写了一个自定义属性。 我正在使用 UnauthorizedResult 返回 401。

  1. 对于 Web API,如何将状态代码 401 或 403 以及一些附加消息作为 JSON 负载返回?
  2. 对于返回 HTML 的 MVC 操作,如何返回状态代码 401 或 403 并重定向到不同的 URL?
  3. 如何检查请求是 WebAPI 还是 MVC 操作?

回答您的第一个问题,这是授权属性的重写方法的样子。 错误消息将是状态消息,内容在响应正文中。

public override Task OnAuthorizationAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
{
    string errorMessage = "User has no enough permissions to perform requested operation.";

    var httpContent = new StringContent("{ \"some\": \"json\"}", Encoding.UTF8, "application/json");

    actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden)
    {
        ReasonPhrase = errorMessage,
        Content = httpContent
    };

    return Task.FromResult<object>(null);
}

从 MVC 操作中,您可以像这样return StatusCode(418);状态代码return StatusCode(418); 或者使用像return Unauthorized();这样的专用方法return Unauthorized(); . 要重定向,您可以使用RedirectToActioncontext.Response.Redirect

至少适用于ASP.NET Core更现代的响应是

public async Task<IActionResult> CtrlAction()
{
    ...
    var result = // whatever object you want
    return StatusCode((int) HttpStatusCode.Unauthorized, result);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM