我可能漏掉了一些显而易见的东西。
我使用的是HttpClient
,它在消息字符串中抛出包含StatusCode
的HttpRequestException
。
我如何访问那个StatusCode
?
编辑:更多信息,我匆忙写了这个问题。
我正在使用HttpClient
访问WebApi项目中的另一个API。是的,我知道我为什么要打电话给EnsureSuccessStatusCode()
。我想向下游传播一些错误,比如404和403。
我想要的只是不断地使用自定义HttpRequestException
将HttpResponseException
转换为ExceptionFilterAttribute
。
不幸的是,HttpRequestException
没有任何额外的信息,我可以使用除了消息。我希望能以原始(int或enum)的形式发现StatusCode
。
看来我也可以:
发布于 2014-03-06 07:42:50
状态代码作为字符串的一部分传递给HttpRequestException
,这样您就不能单独从这些异常中恢复它。
System.Net.Http
的设计要求您访问HttpResponseMessage.StatusCode
而不是等待异常。
http://msdn.microsoft.com/en-us/library/system.net.http.httpresponsemessage(v=vs.110).aspx
如果您现在正在跟踪微软指南,请确保您清楚地理解它为什么要求您调用HttpResponseMessage.EnsureSucessStatusCode
。如果你不调用这个函数,就不会有例外。
发布于 2016-08-10 20:24:13
在需要异常状态属性的情况下,可以这样做:
catch (HttpRequestException requestException)
{
if (requestException.InnerException is WebException webException && webException.Status == WebExceptionStatus.NameResolutionFailure)
{
return true;
}
return false;
}
发布于 2021-01-03 15:07:13
从.NET 5.0开始, HttpRequestException
有一个StatusCode
属性,如果异常表示一个不成功的结果,该属性将具有一个值,否则为null。因此,您可以如下所示:
try
{
// Your code
}
catch (HttpRequestException httpRequestException)
{
if ((int)httpRequestException.StatusCode == 401)
{
// Show unauthorized error message
}
else
{
// Other error message
}
}
有关更多详细信息,请参阅这里
https://stackoverflow.com/questions/22217619
复制相似问题