我可以使用以下代码,可以使用我的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);
答案 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;
}