WebApi:阅读错误

时间:2015-06-04 14:56:15

标签: model-view-controller asp.net-web-api asp.net-mvc-5

我有一个简单的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作为异常来捕获错误而没有运气。

我可以在其余查看器中看到响应正文

WebApi Viewier

我希望能够导航到错误消息,以便将其传递给客户端(稍后将更改为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());

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

使用ResponseStream应该能够访问catch (WebException e) { var message = e.Message; using (var reader = new StreamReader(e.Response.GetResponseStream())) { var content = reader.ReadToEnd(); } } 以及如下自定义错误消息:

{{1}}

希望有所帮助。