Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net核心错误JSON_C#_Asp.net_Json_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# ASP.Net核心错误JSON

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

我正在玩一点ASP.NET内核。我正在创建一个基本的webapi。 我想在出现问题时显示一个JSON错误

打印屏幕在屏幕上显示我想要的。 唯一的问题是它的发送状态代码是200

我可以这样做来解决这个问题:

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块的情况下看起来会很好。只是一个想法。是的,错误一致性是一件好事谢谢你发布这个链接。我会查一查的!祝您有个美好的一天!