【问题标题】:How to read the error message from Request.CreateErrorResponse?如何从 Request.CreateErrorResponse 中读取错误消息?
【发布时间】:2016-06-18 05:56:15
【问题描述】:

我的 WebAPI 方法返回错误响应:

return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Something bad happened");

在我的客户端(一个 MVC 项目)上,我想显示错误消息,但无法显示“发生了一些事情”的消息:

var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode)
{
    ViewBag.Error= response.ReasonPhrase; 
}

除了 ReasonPhrase,我尝试过 response.ToString()response.Content.ToString()response.Content.ReadAsStringAsync()。他们都没有收到我的消息。 Postman 怎么能显示消息?

知道如何访问消息字符串吗?

【问题讨论】:

  • response.Content.ReadAsStringAsync() 应该这样做。您可以发布您尝试这样做的代码吗?可能还有其他错误。
  • 我想我知道问题所在,作为答案添加。

标签: c# .net asp.net-mvc asp.net-mvc-4 asp.net-web-api


【解决方案1】:

如果您的响应内容返回为application/json,您可以使用Json.Net 将其反序列化,如下所示:

if(!response.IsSuccessStatusCode)
{
    var errors = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(response.Content.ReadAsStringAsync().Result);
    var message = errors[HttpErrorKeys.MessageKey];

    // message is "Something bad happened"
}

【讨论】:

    【解决方案2】:

    我认为response.Content.ReadAsStringAsync() 返回一个Task&lt;string&gt;,而不是string。你需要使用

    response.Content.ReadAsStringAsync().Result 
    

    或者如果你的方法被标记为async,你可以等待它。

    string message = await response.Content.ReadAsStringAsync();
    

    【讨论】:

    • 嗯这可能是它...会尝试一下。谢谢。
    • 那给你?
    【解决方案3】:

    这就是我收到错误消息的方法。完成调试后,可以更改返回类型

           public string someRequest()
        {
            try
            {
                var response = await client.SendAsync(request);
                return "Ok";
            }
            catch (Exception e)
            {
             return e.Message;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 2016-12-30
      • 2011-03-06
      • 2016-02-13
      相关资源
      最近更新 更多