我有一个简单的web api,它是从一个mvc项目消耗的,我继续得到'响应状态代码并不表示成功',并且想知道如何从错误中得到响应体,我可以看到休息查看器中的错误但无法导航到错误。这是MVC应用程序中的以下代码
public ActionResult Index()
{
try
{
var uri = "http://localhost:57089/api/values";
using (var client = new HttpClient())
{
Task<string> response = client.GetStringAsync(uri);
object result = JsonConvert.DeserializeObject(response.Result);
return (ActionResult) result;
}
}
catch (Exception ex)
{
return Content(ex.ToString());
}
return View();
}
在API控制器中我发送了一个错误请求,这是代码
public IHttpActionResult Get()
{
return BadRequest("this is a very bad request " + System.DateTime.Now.ToUniversalTime());
}
我尝试使用WebException,HttpRequestException作为异常来捕获错误而没有运气。
我可以在其余查看器中看到响应正文
我希望能够导航到错误消息,以便将其传递给客户端(稍后将更改为guid)。
[EDITED]
我有一个没有使用GetStringAsync的解决方案,但是如果可能的话就想使用它。
这是解决方案
var httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(url);
HttpResponseMessage responseMessage = httpClient.GetAsync("").Result;
if (responseMessage.IsSuccessStatusCode) return Content(responseMessage.ToString());
var a = responseMessage.Content.ReadAsStringAsync().Result;
var result = JsonConvert.DeserializeObject<HttpError>(a);
object value = "";
return Content(result.TryGetValue("ErrorMessage", out value) ? value.ToString() : responseMessage.ToString());
有更好的方法吗?
答案 0 :(得分:0)
使用ResponseStream
您应该能够访问catch (WebException e)
{
var message = e.Message;
using (var reader = new StreamReader(e.Response.GetResponseStream()))
{
var content = reader.ReadToEnd();
}
}
以及如下自定义错误消息:
{{1}}
希望有所帮助。