C#.net Web请求在调用Web API时无法获取404自定义错误消息,但postman会获取
我正在使用ServiceStack在自己的Web API中调用外部Web API。 对于未订阅的用户,外部web API引发预期的“404未找到”异常,自定义消息为“没有uuid为{…uuid已发送的订户”。我可以在《邮递员》中看到 但是,当我在ServiceStack处理程序中调用它时,我不会在catch语句的异常详细信息中获取自定义异常。 下面是我代码的一部分C#.net Web请求在调用Web API时无法获取404自定义错误消息,但postman会获取,c#,asp.net-web-api,servicestack,webrequest,C#,Asp.net Web Api,servicestack,Webrequest,我正在使用ServiceStack在自己的Web API中调用外部Web API。 对于未订阅的用户,外部web API引发预期的“404未找到”异常,自定义消息为“没有uuid为{…uuid已发送的订户”。我可以在《邮递员》中看到 但是,当我在ServiceStack处理程序中调用它时,我不会在catch语句的异常详细信息中获取自定义异常。 下面是我代码的一部分 try{ //Create Request var statusUri =
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)
但我没有收到邮递员在任何例外字段中收到的自定义消息。
我需要确切的自定义消息来区分404由于无效的URL和404由于无效的订户。请帮忙
提前谢谢。看来你需要抓紧时间了 网络例外 相对于 WebServiceException 我不认为你应该返回一个404的无效用户,除非它是一个明确的要求 由于您没有使用HTTP请求,因此不会引发
WebServiceException
相反,您直接使用.NET的HttpWebRequest
,因此它只会引发WebException
,但ServiceStack还包括一个帮助程序,用于访问.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;
}
您正试图捕获一个
WebServiceException
,但引发的异常是一个WebException
。如果您不同意404,如果您简要地详细说明一个替代方案,它可能对OP有用?OP没有特别问这个问题。不过这里有一个方便的链接很酷,所以你建议418
?或者你认为OP可以使用一个更合适的方法吗?事实上,第三方API会返回404,以防订户无效,这是我们无法控制的。。。