C# ASP.Net核心错误JSON
我正在玩一点ASP.NET内核。我正在创建一个基本的webapi。 我想在出现问题时显示一个JSON错误 打印屏幕在屏幕上显示我想要的。 唯一的问题是它的发送状态代码是200 我可以这样做来解决这个问题:C# ASP.Net核心错误JSON,c#,asp.net,json,asp.net-core,asp.net-core-mvc,C#,Asp.net,Json,Asp.net Core,Asp.net Core Mvc,我正在玩一点ASP.NET内核。我正在创建一个基本的webapi。 我想在出现问题时显示一个JSON错误 打印屏幕在屏幕上显示我想要的。 唯一的问题是它的发送状态代码是200 我可以这样做来解决这个问题: return NotFound(new JsonResult(e.Message) {StatusCode = 404); 但我不喜欢这样,因为现在您可以使用NotFound指定statuscode 500 有人能给我指出正确的方向吗 真诚地, 布莱希特你不能做一些像returnnotfou
return NotFound(new JsonResult(e.Message) {StatusCode = 404);
但我不喜欢这样,因为现在您可以使用NotFound指定statuscode 500
有人能给我指出正确的方向吗
真诚地,
布莱希特你不能做一些像returnnotfounde.Message这样的事情吗 或者您可能有自己的错误文档格式,并选择returnnotfoundnewerrordocumente.message 如果必须返回一个JsonResult,请执行以下操作:
return new JsonResult(YourObject) { StatusCode = (int)HttpStatusCode.NotFound };
现在,您可以完全控制响应格式和状态代码。如果需要,您甚至可以附加序列化程序设置: 您不能执行类似return NotFounde.Message的操作吗 或者您可能有自己的错误文档格式,并选择returnnotfoundnewerrordocumente.message 如果必须返回一个JsonResult,请执行以下操作:
return new JsonResult(YourObject) { StatusCode = (int)HttpStatusCode.NotFound };
现在,您可以完全控制响应格式和状态代码。如果需要,您甚至可以附加序列化程序设置:
感谢Swagata Prateek提醒我使用返回的新JsonResult。我确实用这种方法解决了我的问题
public class Error
{
public string Message { get; }
public int StatusCode { get; }
public Error(string message, HttpStatusCode statusCode)
{
Message = message;
StatusCode = (int)statusCode;
}
}
[HttpGet("{id}")]
public IActionResult Get(int id)
{
try
{
return Ok(_manager.GetPokemon(id));
}
catch (NullReferenceException e)
{
var error = new Error(e.Message, HttpStatusCode.NotFound);
return new JsonResult(error) {StatusCode = error.StatusCode};
}
}
感谢Swagata Prateek提醒我使用返回的新JsonResult。我确实用这种方法解决了我的问题
public class Error
{
public string Message { get; }
public int StatusCode { get; }
public Error(string message, HttpStatusCode statusCode)
{
Message = message;
StatusCode = (int)statusCode;
}
}
[HttpGet("{id}")]
public IActionResult Get(int id)
{
try
{
return Ok(_manager.GetPokemon(id));
}
catch (NullReferenceException e)
{
var error = new Error(e.Message, HttpStatusCode.NotFound);
return new JsonResult(error) {StatusCode = error.StatusCode};
}
}
第二段代码是正确的方法。您可以指定一个500作为状态代码,但为什么呢,您可以控制api。您不必在JsonResult上设置状态代码。NotFound方法已经在这样做了。第二段代码是正确的方法。您可以指定一个500作为状态代码,但为什么呢,您可以控制api。您不必在JsonResult上设置状态代码。NotFound方法已经在这样做了;然后错误消息显示为纯文本,因为e.消息是一个普通的“字符串”。检查ModelState的其他错误是JSON。它喜欢有一致性。我创建了“现在”和“犯错误”类。我将分别发布我的新解决方案。谢谢你给我指路。我正忙着使用NotFound。它完全忘记了只使用“new JsonResult”作为返回。我理解modelstate检查。如果你想在这方面做得更好,我建议你使用一个异常过滤器。然后,您所需要担心的就是抛出一个适当的异常,并且您的控制器在主代码周围没有全局try-catch块的情况下看起来会很好。只是一个想法。是的,错误一致性是一件好事谢谢你发布这个链接。我会查一查的!祝您有个美好的一天!如果我返回NotFounde.消息;然后错误消息显示为纯文本,因为e.消息是一个普通的“字符串”。检查ModelState的其他错误是JSON。它喜欢有一致性。我创建了“现在”和“犯错误”类。我将分别发布我的新解决方案。谢谢你给我指路。我正忙着使用NotFound。它完全忘记了只使用“new JsonResult”作为返回。我理解modelstate检查。如果你想在这方面做得更好,我建议你使用一个异常过滤器。然后,您所需要担心的就是抛出一个适当的异常,并且您的控制器在主代码周围没有全局try-catch块的情况下看起来会很好。只是一个想法。是的,错误一致性是一件好事谢谢你发布这个链接。我会查一查的!祝您有个美好的一天!