如何使用404状态码返回JSON结果

5ktev3wc  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(132)

我正在使用ASP.NET Web API 2,我想从我的API返回一个错误代码为404的JSON结果。
我试着模仿this result

{
  "message": "Not Found",
  "documentation_url": "https://docs.github.com/rest/reference/users#get-a-user"
}

这就是我所尝试的:

[RoutePrefix("error")]
public class ErrorController : ShoplessBaseApiController
{
    [HttpGet]
    [Route("notfound")]
    public IHttpActionResult NotFoundMessage()
    {
        return MyNotFound(new { Message = "Not douns", DocumentationUrl = "My documentation path" });
    }

    protected IHttpActionResult MyNotFound<T>(T t)   
    {
        return Content(HttpStatusCode.NotFound, JsonConvert.SerializeObject(t));
    }
}

上面的返回一个序列化的json,但问题是内容类型不是json。
我想返回这样的东西:

[HttpGet]
[Route("notfound")]
public IHttpActionResult NotFoundMessage()
{
    return Json(new { Message = "Not found", DocumentationUrl = "My documentation path" });
}

但问题是,Json不接受状态码并返回200

nqwrtyyt

nqwrtyyt1#

在ASP.NET WebAPI的情况下,您可以使用Content
Content的第一个参数是状态码,第二个是字符串(已经序列化的响应体)

return Content(HttpStatusCode.NotFound, responseObjectInJson);

请记住,在较新的ASP.NET版本中,Content没有可以接受StatusCode的重载。在这种情况下,您可以将NotFound与任何对象一起使用,ASP.NET将代表您对其进行序列化。

return NotFound(responseObject);

更新#1

我忽略了您声明没有设置内容类型的部分。

return new ContentResult
{
    Content = responseObjectInJson,
    ContentType = "application/json",
    StatusCode = (int)HttpStatusCode.NotFound
};

相关问题