Model view controller WebApi:读取错误
我有一个简单的web api,它是从一个mvc项目中使用的,我一直在获取“响应状态代码不表示成功”,我想知道如何从错误中获取响应体,我可以在rest查看器中看到错误,但无法导航到错误。这是MVC应用程序中的以下代码Model view controller WebApi:读取错误,model-view-controller,asp.net-web-api,asp.net-mvc-5,Model View Controller,Asp.net Web Api,Asp.net Mvc 5,我有一个简单的web api,它是从一个mvc项目中使用的,我一直在获取“响应状态代码不表示成功”,我想知道如何从错误中获取响应体,我可以在rest查看器中看到错误,但无法导航到错误。这是MVC应用程序中的以下代码 public ActionResult Index() { try { var uri = "http://localhost:57089/api/values"; using (var cl
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();
}
我尝试使用WebException、HttpRequestException作为异常来捕获错误,但没有成功
我可以在rest查看器中看到响应主体
我希望能够导航到错误消息,以便将其传递给客户端(稍后将更改为guid)
[已编辑]
我有一个不使用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());
var-httpClient=new-httpClient();
httpClient.BaseAddress=新Uri(url);
HttpResponseMessage responseMessage=httpClient.GetAsync(“”).Result;
if(responseMessage.IsSuccessStatusCode)返回内容(responseMessage.ToString());
var a=responseMessage.Content.ReadAsStringAsync().Result;
var result=JsonConvert.DeserializeObject(a);
对象值=”;
返回内容(result.TryGetValue(“ErrorMessage”,out value)?value.ToString():responseMessage.ToString());
有更好的方法吗?使用
WebException
您应该能够访问响应团队和如下自定义错误消息:
catch (WebException e)
{
var message = e.Message;
using (var reader = new StreamReader(e.Response.GetResponseStream()))
{
var content = reader.ReadToEnd();
}
}
希望这能有所帮助。嗨,David,不幸的是,我尝试过使用webexception、AggregateException、HttpRequestException。它在AggregateException上中断,没有关于错误的信息。我用另一种方式工作,没有使用GetStringAsync,虽然我更喜欢使用GetStringAsync。您应该发布您的解决方案。我已经发布了针对此问题的解决方案,不知道是否有更好的方法使用GetStringAsync。
catch (WebException e)
{
var message = e.Message;
using (var reader = new StreamReader(e.Response.GetResponseStream()))
{
var content = reader.ReadToEnd();
}
}