servicestack,webrequest,C#,Asp.net Web Api,servicestack,Webrequest" /> servicestack,webrequest,C#,Asp.net Web Api,servicestack,Webrequest" />

C#.net Web请求在调用Web API时无法获取404自定义错误消息,但postman会获取

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 =

我正在使用ServiceStack在自己的Web API中调用外部Web API。 对于未订阅的用户,外部web API引发预期的“404未找到”异常,自定义消息为“没有uuid为{…uuid已发送的订户”。我可以在《邮递员》中看到

但是,当我在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)
但我没有收到邮递员在任何例外字段中收到的自定义消息。

我需要确切的自定义消息来区分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,以防订户无效,这是我们无法控制的。。。