使用 PostAsync 发送 httpcontent 会导致内部服务器错误

Posted

技术标签:

【中文标题】使用 PostAsync 发送 httpcontent 会导致内部服务器错误【英文标题】:Send httpcontent with PostAsync gives Internal Server Error 【发布时间】:2016-12-21 20:02:24 【问题描述】:

要在 PostAsync 方法中将数据作为查询字符串发送,我使用以下方法。但我收到内部服务器错误。

 HttpResponseMessage response;
 string stringContent = " 'request_key': 'ABCD1234', 'request_code': 'CODE', 'request_type':'ID_type' ";
using(var client = new HttpClient()) 

                client.BaseAddress = new Uri(SubscriptionUtility.GetConfiguration("BaseURI"));
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(SubscriptionUtility.GetConfiguration("ContentType")));
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", SubscriptionUtility.GetConfiguration("BasicAuthentication"));

                response = await client.PostAsync(SubscriptionUtility.GetConfiguration("SubscriptionAPI"), stringContent, new JsonMediaTypeFormatter());
                if(response.IsSuccessStatusCode) 

                    var dataObjects = JsonConvert.DeserializeObject<List<TestClass>>(response.Content.ReadAsStringAsync().Result);
                    //foreach(var d in dataObjects) 

                    //
                
            

但是当我通过提琴手发送请求时,它工作正常。这是我的提琴手要求

用户代理:提琴手

内容类型:应用程序/json;字符集=utf-8

主机:testapi.com

内容长度:93

授权:基本 12fbe6e1f63d832aa33232323

发布数据: "request_key":"ABCD1234", "request_code":"代码", "request_type":"ID_type"

【问题讨论】:

不使用fiddler时的痕迹是什么? 仅供参考,基本授权将是授权:基本 12fbe6e1f63d832aa33232323,而不是令牌 【参考方案1】:

我使用以下方法实现了所需的功能 Post Request

using(var client = new HttpClient()) 


                client.BaseAddress = new Uri(SubscriptionUtility.GetConfiguration("BaseURI"));
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(SubscriptionUtility.GetConfiguration("ContentType")));
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", SubscriptionUtility.GetConfiguration("BasicAuthentication"));
                var values = new Dictionary<string, string>
                    
                        "request_key", "ABCD1234" ,
                        "request_code", "CODE" ,
                        "request_type", "ID_type" 
                    ;

                var content = new FormUrlEncodedContent(values);

                var response = await client.PostAsync(SubscriptionUtility.GetConfiguration("SubscriptionAPI"), content);
                var responseString = await response.Content.ReadAsStringAsync();

【讨论】:

以上是关于使用 PostAsync 发送 httpcontent 会导致内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥 HttpClient.PostAsync 似乎将请求作为 GET 而不是 POST 发送?

使用 HttpClient PostAsync 发送 C# NameValueCollection 问题

对象在 PostAsync 与 HttpClient 之后被释放

在 context.postAsync() 和发送打字活动时,任务被取消错误 Bot Framework

HttpClient 中的 PostAsync 不会将数据发送到我的 webapi

如何正确使用 HttpClient PostAsync 参数?