C#.net Web 请求在调用 web API 时无法获得 404 自定义错误消息,但邮递员可以

C#.net Web Request could not get 404 custom error message while calling web API but postman does

我正在使用 ServiceStack 在我自己的 Web API 中调用外部 Web API。 对于未订阅的用户,外部网站 API 会抛出预期的“404 未找到”异常,自定义消息为 "No subscriber with uuid: {...uuid sent}"。我可以在邮递员中看到它

但是当我在我的 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。请帮忙。

提前致谢。

看来你需要抓住 Web异常 而不是 WebServiceException

我认为您不应该 return 为无效订户发送 404,除非有明确的要求!

因为您没有使用 ServiceStack's Generic C# Clients,您的 HTTP 请求不会抛出 WebServiceException

您直接使用 .NET 的 HttpWebRequest,因此它只会抛出一个 WebException,但 ServiceStack 还包含 HTTP Utils,它提供了帮助程序来访问 .NET 抛出的异常。 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;
}