【问题标题】:Get JSON response from WebException从 WebException 获取 JSON 响应
【发布时间】:2019-04-04 20:01:07
【问题描述】:

我尝试了下面的答案,但我得到的只是一个空字符串。

WebException how to get whole response with a body?

我已经测试过通过邮递员到达端点,并且我得到了我期望的 json 响应(错误响应)。但是当我尝试在 .net 中点击该端点时,响应似乎不包含 JSON。上述问题的答案结果为空字符串。

catch (WebException ex)
        {

            var resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();

            dynamic obj = JsonConvert.DeserializeObject(resp);
            var messageFromServer = obj.error.message;
            return messageFromServer;

        }

当我尝试只返回 ReadToEnd() 字符串时,它是空的。只是 ””。

但如前所述,我正在访问的端点正确返回 JSON。

{
    "Message" : "The number could not be found"
}

【问题讨论】:

  • 你在 ex.Message 中有什么?
  • 错误响应在大多数情况下包含正文。在尝试阅读之前,您必须验证是否有任何内容要阅读。 401、403 或 500 不会包含实体。在尝试读取响应之前检查WebException.Status 属性
  • 代码应该像这样工作。您确定您的测试中没有其他 HTTP 错误吗?这可能是“找不到号码”以外的另一个错误
  • @GrzesiekDanowski 它只是说“发生错误”
  • @Reno 是的。它说“发生错误”,这完全没有帮助。我需要来自服务器的特定错误。这是 api 服务器的标准流程。如果 Panagiotis 是正确的并且没有提供错误响应的正文,那么这令人沮丧和悲伤。 MS,别再试图把你的意见强加给开发者了。给我完整的回复...

标签: c# .net system.net.webexception


【解决方案1】:

这只是示例,在您的情况下,您应该使用以下内容:

dynamic obj = JsonConvert.DeserializeObject(resp);
var messageFromServer = obj.Message;

请比较链接问题中的 JSON:

{  
   "count":0,
   "startIndex":0,
   "status":1,
   "statusCode":500,
   "error":{  
      "message":"Invalid username or password."
   }
},

还有你的:

{
    "Message" : "The number could not be found"
}

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 2012-06-08
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2018-05-31
    • 2012-04-21
    相关资源
    最近更新 更多