使用HttpResponseMessage查看错误

时间:2014-05-19 14:30:30

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

我可以使用以下代码,可以使用我的Web API登录。但是,当出现问题并返回错误时,我不知道如何处理HttpResponseMessage的问题。如果我只使用ReadAsStringAsync()方法,我会在字符串中得到错误,但它是什么类型的?如果我知道我可以获得该对象的类型。

HttpResponseMessage response = await client.PostAsJsonAsync("api/Login", loginObject);
if (response.IsSuccessStatusCode)
{
    var _logonResponse = await response.Content.ReadAsAsync<TokenResponseModel>();
}
else
{
    // an error has occured, but what is the type to read?
    var test = await response.Content.ReadAsStringAsync();
}

在服务器上它正在返回;

BadRequest(ModelState).

感谢您的帮助。

编辑:我已经解决了这个问题;

var value = await response.Content.ReadAsStringAsync();
var obj = new { message = "", ModelState = new Dictionary<string, string[]>() };
var x = JsonConvert.DeserializeAnonymousType(value, obj);

4 个答案:

答案 0 :(得分:1)

这里只是在错误信息的文本中抓取原始json ...

 if (!response.IsSuccessStatusCode)
 {                                
    dynamic responseForInvalidStatusCode = response.Content.ReadAsAsync<dynamic>();
    Newtonsoft.Json.Linq.JContainer msg = responseForInvalidStatusCode.Result;
    result = msg.ToString();
 }

答案 1 :(得分:0)

尝试IO StreamReader。这是vb.net,但转换起来并不难:

IOStreamReader = New IO.StreamReader(Response.GetResponseStream)
RespStr = IOStreamReader.ReadToEnd

       Dim HttpReq As Net.HttpWebRequest = Nothing
       Dim HttpStatus As Net.HttpStatusCode = Nothing

      HttpResp = CType(HttpReq.GetResponse(), Net.HttpWebResponse)            
      'verify the response
      HttpStatus = HttpResp.StatusCode

答案 2 :(得分:0)

返回的结果是 JSON 对象,其中包含&#34; 消息&#34;和&#34; ModelState &#34;属性。

&#34; ModelState &#34; state value是一个对象,其属性是字符串数组。 &#34; ModelState &#34;的属性列表根据哪些财产无效,不时变化。

因此,要获得强类型返回响应,为什么不在服务器端自己操作 ModelState ,然后将对象传递给 BadRequest() 方法

答案 3 :(得分:0)

尝试以下:

 try
    {
            HttpResponseMessage response = await client.PostAsJsonAsync("api/Login", loginObject);
            response.EnsureSuccessStatusCode();
            var _logonResponse = await response.Content.ReadAsAsync<TokenResponseModel>();
            return _logonResponse;
    }
  catch (Exception ex)
    {
           throw ex;        
    }