HTTPClient 返回 400 Bad Request 但 Postman 在 C# 中返回 201

Posted

技术标签:

【中文标题】HTTPClient 返回 400 Bad Request 但 Postman 在 C# 中返回 201【英文标题】:HTTPClient returns 400 Bad Request but Postman returns 201 in C# 【发布时间】:2020-10-24 07:32:58 【问题描述】:

我有以下代码用于发布请求

    [TestMethod]
    public async Task<Tuple<int, string>> PostRequestAdditionalAttributeValid0000()
    
        string locationPath = solutionDirectory.ToString();
        var jsonText = File.ReadAllText(locationPath + @"\TestJsons\testdata.json");

        using (var client = new HttpClient())
        
            var content = new StringContent(json, Encoding.UTF8, "application/json");
            
            //Add client header
            client.DefaultRequestHeaders.Add("client_uuid", "2fd77dd8-ed76-4bba-b0e1-5cda454c8d6e");

            var result = await client.PostAsync(urlPost, content);

            int StatusNumber = (int)result.StatusCode;
            string resultContent = await result.Content.ReadAsStringAsync();

            return new Tuple<int, string>(StatusNumber, resultContent);
        
    

在 Postman 中它返回 201 但 HTTPClient 返回 400 响应(错误请求)。我不知道为什么。

我的json如下

       
    "audit_date": "2020-05-13T11:27:10.3187798Z",
    "client_uuid": "2fd77dd8-ed76-4bba-b0e1-5cda454c8d6e",
    "audit_entry": 
        "where_uri": "test.com/apps/171f0841-825b-4964-8f8c-0869650f14a6",
        "why_uri": "test.com/reference/reasons_for_change/61acc173-7168-4ae5-9f04-afa228941f8b",
        "who_uri": "test.com/users/4977dae1-a307-425f-980c-53413fef1b0f",
        "when_audited": "2018-11-13T20:20:39+00:00",
        "what_uri": "test.com/tests/1bc67a71-8549-4ab8-9dd9-e44238198860",
        "what_changed": [
            
                "attribute_name": "birth_year",
                "attribute_value": "1969",
                "attribute_change": null
            ,
            
                "attribute_name": "subject_reference",
                "attribute_value": "TEST-WOO3444",
                "attribute_change": null
            
        ]
        

非常感谢任何帮助。我已经搜索并阅读了其他类似的问题,甚至尝试了其他 *** 帖子的解决方案,但似乎都不起作用。

这是我在 400 Bad request 旁边遇到的错误

对象引用未设置为对象的实例。

单步执行这行代码后

var result = await client.PostAsync(urlPost, content);

【问题讨论】:

使用 Telerik Fiddler 捕获 RAW http 请求并比较它们以查看差异。您也可以在此处粘贴这两个请求,以便我们为您提供帮助! 不,这只是 HTTP 请求的正文。 Fiddler 是一个本地代理,您可以使用它来查看您的网络浏览器、fiddler、... 发出的实际 HTTP 请求。这样您就可以比较两个请求之间的不同之处,并分析导致它失败的原因。根据问题中提供的当前信息,可能没有人能够帮助您。 检查嗅探器中的第一个请求并比较 c# 和 Postman 中的标头。 c# 中的默认标头与 Postman 不同。使 c# 标头看起来像 Postman。 除了状态码之外,服务器是否给出任何错误信息?例如,您可以从邮递员导出工作请求的 cURL 表示并将其添加到问题中吗?可能您缺少一些标题。您是否可以控制要发布到的服务器?您可以尝试在那里调试... 顺便说一句:你不应该为每个请求创建一个新的HttpClient,而是重用以前创建的实例aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong 【参考方案1】:

感谢所有的想法,原来我的 json 对于邮递员和我的代码略有不同,所以 400 bad request 实际上是我传入的 json 的正确结果。(我错过了一个必填字段)

抱歉给您添麻烦了。

【讨论】:

以上是关于HTTPClient 返回 400 Bad Request 但 Postman 在 C# 中返回 201的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 400 Bad request 原因

远程服务器返回意外响应:(400) Bad Request

远程服务器返回意外响应:(400) Bad Request

HttpWebRequest-远程服务器返回错误:(400) Bad Request

Laravel 6 护照在错误的凭证上返回 400 Bad request

Ajax 返回 400 Bad Request (xhr),admin-ajax.php 返回 '0'?