【问题标题】:How can I retrieve passed exception from HttpResponseMessage(HttpStatusCode, Exception)如何从 HttpResponseMessage(HttpStatusCode, Exception) 检索传递的异常
【发布时间】:2015-05-06 02:13:12
【问题描述】:

根据下面的网站可以给HttpResponseMessage.CreateErrorResponse方法传递一个异常参数(https://msdn.microsoft.com/en-us/library/jj127064(v=vs.118).aspx

我的问题是如何从 CreateErrorResponse 方法创建的 HttpResponseMessage 中检索异常信息。如果无法获取异常信息,那么将异常作为输入的方法重载有什么意义?

为了澄清我不寻找的答案...... 我知道我可以在正文(http://weblogs.asp.net/fredriknormen/asp-net-web-api-exception-handling)的内容中传递自定义错误原因,但我真的很好奇如何使用 HttpRequestMessageExtensions.CreateErrorResponse 方法(HttpRequestMessage, HttpStatusCode, Exception) 方法重载。

WebAPI 控制器示例:

Route("location/{locationName}/Databases/{databasename}/ProcedureSession")][LocationSetUp]
public HttpResponseMessage Post([FromBody] ProcedureSessionData procedureSession)
    {
        try
        {
            throw new Exception("test Exception");
        }
        catch (Exception e)
        {
           return Request.CreateErrorResponse(HttpStatusCode.InternalServerError,
             e);
        }
    }

如何获取这段代码中的异常:

using (var client = new HttpClient())
  {
    client.BaseAddress = new Uri("http://localhost/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    string api = "testApi/location/here/databases/testDb/ProcedureSession";
    HttpResponseMessage response = client.PostAsJsonAsync(api, newSessionData).Result;
    if (!response.IsSuccessStatusCode)
    {
         //how can i pick up the exception object from here? 
         //Or am I missing the point of this CreateErrorResponse overload?
    }

【问题讨论】:

  • 你能根据你的尝试或尝试做的事情显示你有什么代码吗?

标签: c# error-handling asp.net-web-api


【解决方案1】:

要从 HttpResponseMessage 获取错误消息,您必须获取 HttpError 对象,如下所示。然后,HttpError 对象包含 ExceptionMessage、ExceptionType 和 StackTrace 信息。

if(!response.IsSuccessStatusCode){
    HttpError error = response.Content.ReadAsAsync<HttpError>().Result;
}

【讨论】:

    【解决方案2】:

    你可以试试

     response.EnsureSuccessStatusCode()
    

    如果未收到成功的响应代码,则会引发异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-25
      • 2015-08-18
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      相关资源
      最近更新 更多