如何从Request.CreateErrorResponse中读取错误消息?

时间:2016-06-18 05:56:15

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

我的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如何能够显示消息?

我是如何访问消息字符串的?

3 个答案:

答案 0 :(得分:5)

如果您的回复内容以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"
}

答案 1 :(得分:3)

我认为response.Content.ReadAsStringAsync()会返回Task<string>,而不是string。您需要使用

response.Content.ReadAsStringAsync().Result 

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

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

答案 2 :(得分:0)

这就是我所做的以获取错误消息。完成调试后,您可以更改返回类型

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