Model view controller WebApi:读取错误

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

我有一个简单的web api,它是从一个mvc项目中使用的,我一直在获取“响应状态代码不表示成功”,我想知道如何从错误中获取响应体,我可以在rest查看器中看到错误,但无法导航到错误。这是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();
    }
我尝试使用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();
    }
}