C# 从Postman发送Json返回代码200,从HttpClient发送Json返回503(您的分块POST数据太大,无法上传)

C# 从Postman发送Json返回代码200,从HttpClient发送Json返回503(您的分块POST数据太大,无法上传),c#,api,postman,ups,C#,Api,Postman,Ups,我正在使用UPS的地址验证调用()对其进行api调用。我以前曾成功调用过来自UPS的不同GET(例如:UPS地址Streen级别验证) 以下是正在发送的json: { "AccessRequest": { "AccessLicenseNumber": "removed for security reasons", "UserId": "removed for security reasons", "Password": "removed

我正在使用UPS的地址验证调用()对其进行api调用。我以前曾成功调用过来自UPS的不同GET(例如:UPS地址Streen级别验证)

以下是正在发送的json:

 {
    "AccessRequest": {
        "AccessLicenseNumber": "removed for security reasons",
        "UserId": "removed for security reasons",
        "Password": "removed for security reasons"
    },
    "AddressValidationRequest": {
        "Request": {
            "TransactionReference": {
                "CustomerContext": ""
            },
            "RequestAction": "AV"
        },
        "Address": {
            "City": "",
            "StateProvinceCode": "",
            "PostalCode": "98272"
        }
    }
}
在PostMan中,仅使用默认标题:

这将成功返回我正在查找的代码为200的数据

在.Net标准2.0库中,我使用HTTPClient(Microsoft.AspNet.WebApi.Client 5.2.7)调用api。下面是我如何启动HTTP客户端(称为“ApiClient”的变量):

现在我已经创建了模型来排列,所以它发送与Postman完全相同的Json。通过下面的代码,您将看到我自己通过序列化对其进行了双重检查(我将该字符串复制到postman中,并像一个符咒一样工作)。所以我发出了我的请求。我将代码稍微缩短了一点,以表明我的观点:

string json = JsonConvert.SerializeObject(request);
Debug.Print(json);
using (HttpResponseMessage response = await ApiClient.PostAsJsonAsync("/rest/AV", request))
{
    var content = await response.Content.ReadAsStringAsync();
}
以下是内容返回的内容:

<HTML><HEAD><TITLE>Weblogic Bridge Message</TITLE></HEAD> <BODY><H2>Failure of Web Server bridge:</H2><P><hr>Your chunked POST data is too large to upload.<hr> </BODY></HTML>
Weblogic网桥Web服务器网桥消息失败:


您的分块帖子数据太大,无法上传。
返回代码是503。有人能把我引向正确的方向吗?我只是不知道HTTP客户端发送的是什么,这使得它如此之大,以至于我得到了这个响应。令我惊讶的是,我对api进行了另一次调用,它发送了更多的数据,并且工作得非常完美。如有任何建议,将不胜感激

注意:我已经仔细检查了我是否使用正确的URL请求呼叫

更新:多亏了Nehorai,我发现我可以使用名为RestSharp的第三方dll进行Api调用。这个图书馆工作得完美无缺!虽然我很想知道为什么HTTP客户端在这种情况下不能工作。下面是我使用RestSharp的代码,以防有人想看到它:

var client = new RestClient("https://onlinetools.ups.com/rest/AV");
client.Timeout = -1;
var requestRest = new RestRequest(Method.POST);
requestRest.AddHeader("Content-Type", "application/json");
requestRest.AddJsonBody(request);
var result = await client.ExecutePostAsync<ZipInfo_RootResponse>(requestRest);
var client=new RestClient(“https://onlinetools.ups.com/rest/AV");
client.Timeout=-1;
var requestRest=new RestRequest(Method.POST);
AddHeader(“内容类型”、“应用程序/json”);
AddJsonBody(请求);
var result=await client.executepstatsync(requestRest);

在postman中,您可以查看请求的代码片段,单击“代码”:


然后你可以选择语言,选择C#,你可以在C#代码中看到请求(你需要添加对dll的引用)

在PostMan中不知道这个功能。谢谢你的信息!我以前也从未听说过RestSharp。但在实施之后,它工作得非常好。我仍然想知道为什么Http客户端不这样做。很抱歉响应太晚。尽管我依赖RestSharp,但它确实解决了我的问题,非常感谢!可能是因为WebClient使用分块传输编码,而Postman使用的是内容长度头。如果需要,您可以在WebClient上设置内容长度标题。@DavidBrowne Microsoft我曾尝试关闭分块传输编码,但遗憾的是仍然没有帮助。当我根本没有发送那么多数据的时候,我却得到了这个错误,这让我很困惑。我在他们的API中对另一个geter进行的调用需要在头部和正文中提供更多信息。不过这个电话没问题。
var client = new RestClient("https://onlinetools.ups.com/rest/AV");
client.Timeout = -1;
var requestRest = new RestRequest(Method.POST);
requestRest.AddHeader("Content-Type", "application/json");
requestRest.AddJsonBody(request);
var result = await client.ExecutePostAsync<ZipInfo_RootResponse>(requestRest);