我正在使用 ServiceStack 在我自己的 Web API 中调用外部 Web API。 对于取消订阅的用户,外部 Web API 会抛出预期的“404 未找到”异常,自定义消息为“没有 uuid 的订阅者:{...uuid 已发送}”。我可以在 postman 中看到它
但是当我在 ServiceStack 处理程序中调用它时,我没有在 catch 语句的异常详细信息中获得自定义异常。 以下是我的代码的一部分
try{
//Create Request
var statusUri =new Uri(urlOfExternalWebAPI, UriKind.Absolute);
var serviceRequest = (HttpWebRequest) WebRequest.Create(statusUri);
serviceRequest.Method = "GET";
serviceRequest.Headers.Add("Authorization",OauthToken.TokenType + " " + OauthToken.AccessToken);
serviceRequest.Accept = "application/json";
//Get the response.
using (var response = serviceRequest.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
if (responseStream != null)
{
using (var reader = new StreamReader(responseStream))
{
var responseFromServer = reader.ReadToEnd();
}
}
}
}
}
catch (WebServiceException e) //
{
//Exception is not getting caught here
throw;
}
catch (Exception ex)
{
// exception is caught here but could not get the custom error message
throw;
}
异常详细信息:
System.Net.WebException
HResult=0x80131509
Message=The remote server returned an error: (404) Not Found.
Source=System
StackTrace:
at System.Net.HttpWebRequest.GetResponse()
at ...Host.Request.testRequestHandler.Get(GetStatus request)
in ...\\testRequestHandler.cs:line 231
at ServiceStack.Host.ServiceRunner`1.Execute(IRequest request, Object instance, TRequest requestDto)
但是我没有收到在 Postman 中异常的任何字段中收到的自定义消息。
我需要准确的自定义消息来区分由于 URL 无效而导致的 404 错误和由于订阅者无效而导致的 404 错误。请帮忙。
提前致谢。
最佳答案
因为您没有使用 ServiceStack's Generic C# Clients您的 HTTP 请求不会抛出 WebServiceException
。
您直接使用 .NET 的 HttpWebRequest
,因此它只会抛出 WebException
,但 ServiceStack 也包含 HTTP Utils它提供了用于访问 .NET 的 HttpWebRequest
抛出的异常的帮助程序,例如:
try
{
//...
}
catch (Exception ex)
{
var clientEx = ex.IsAny400();
var notFound = ex.IsNotFound();
HttpStatusCode? errorStatus = ex.GetStatus(); // HTTP Status Code
string errorBody = ex.GetResponseBody(); // Error Response Body (if any)
var errorResponse = (HttpWebResponse)ex.Response;
var description = errorResponse.StatusDescription;
}
关于C#.net Web 请求在调用 Web API 时无法获取 404 自定义错误消息,但 postman 却可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59319203/