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

标签 c# asp.net-web-api servicestack webrequest

我正在使用 ServiceStack 在我自己的 Web API 中调用外部 Web API。 对于取消订阅的用户,外部 Web API 会抛出预期的“404 未找到”异常,自定义消息为“没有 uuid 的订阅者:{...uuid 已发送}”。我可以在 postman 中看到它 enter image description here

但是当我在 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/

相关文章:

c# - WebAPI OData 日期时间序列化

repository-pattern - 使用 ServiceStack.ORMLite 构建存储库

servicestack - 超时已过。 - 在 ServiceStack 服务中使用 Db

c# - SQL TO Linq,如何返回对象并填充属性

c# - 通过后台 worker 控制获取局域网上的 IP 地址

c# - 如何使用 if 语句返回此变量?

c# - 在我的 C# WPF 应用程序中应用 Ninject 来处理 "child viewmodels"

javascript - AudioContext.currentTime 在 Chromebook 上永远停留在 0.010666666

jquery - MVC 4 ApiController 操作上的空参数

servicestack - ServiceStack 中的 Funq 范围(最佳实践)