gpt4 book ai didi

c# - 如何从 HttpResponseMessage(HttpStatusCode, Exception) 检索传递的异常

转载 作者:太空狗 更新时间:2023-10-29 19:59:35 32 4
gpt4 key购买 nike

根据以下网站,您可以将异常参数传递给 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 Controller 示例:

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?
}

最佳答案

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

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

关于c# - 如何从 HttpResponseMessage(HttpStatusCode, Exception) 检索传递的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28865487/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com