gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:54:09 27 4
gpt4 key购买 nike

我正在使用 ServiceStack 在我自己的 Web API 中调用外部 Web API。
对于取消订阅的用户,外部 Web API 会抛出预期的“404 Not found”异常,自定义消息为 “没有带有 uuid 的订阅者:{...uuid sent}” .我可以在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com