C# 无法将curl请求转换为asp.net core中的HttpClient/AnyOtherPackage
我有一个curl请求,它是有效的:C# 无法将curl请求转换为asp.net core中的HttpClient/AnyOtherPackage,c#,asp.net-core,dotnet-httpclient,C#,Asp.net Core,Dotnet Httpclient,我有一个curl请求,它是有效的: curl --insecure -X POST 'https://someurl' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'k1=v1' --data-urlencode 'k2=v2' --data-urlencode 'k3=v3' --data-urlencode 'k4=v4' --data-urlencode 'k5=v5' 我从SO尝
curl --insecure -X POST 'https://someurl' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'k1=v1' --data-urlencode 'k2=v2' --data-urlencode 'k3=v3' --data-urlencode 'k4=v4' --data-urlencode 'k5=v5'
我从SO尝试了多种解决方案,但不幸的是,我无法将其转换为HttpClient
请求,我收到了BadRequest
。我的代码是:
var client = new HttpClient();
// var dict = new Dictionary<string, string>();
// dict.Add("k1", "v1");
// dict.Add("k2", "v2");
// dict.Add("k3", "v3");
// dict.Add("k4", "v4");
var request = new HttpRequestMessage(HttpMethod.Post,
"https://someurl");
request.Content = new StringContent("{\"k1\":\"v1\",\"k2\":\"v2\",\"k3\":\"v3\",\"k4\":\"v4\"}",
Encoding.UTF8,
"application/x-www-form-urlencoded");//CONTENT-TYPE header
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
// request.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
// var req = new HttpRequestMessage(HttpMethod.Post, url) { Content = new FormUrlEncodedContent(dict) };
// var res = client.SendAsync(request);
client.SendAsync(request)
.ContinueWith(responseTask =>
{
// responseTask had badrequest status in it
});
var-client=new-HttpClient();
//var dict=新字典();
//添加(“k1”、“v1”);
//添加(“k2”、“v2”);
//添加(“k3”、“v3”);
//添加(“k4”、“v4”);
var请求=新的HttpRequestMessage(HttpMethod.Post,
"https://someurl");
request.Content=newstringcontent(“{\“k1\”:“v1\”,“k2\”:“v2\”,“k3\”:“v3\”,“k4\”:“v4\”),
Encoding.UTF8,
“application/x-www-form-urlencoded”)//内容类型标题
request.Content.Headers.ContentType=新的MediaTypeHeaderValue(“application/x-www-form-urlencoded”);
//request.Headers.Add(“内容类型”、“应用程序/x-www-form-urlencoded”);
//var req=newhttprequestmessage(HttpMethod.Post,url){Content=newformurlencodedcontent(dict)};
//var res=client.sendaync(请求);
client.sendaync(请求)
.ContinueWith(responseTask=>
{
//responseTask中的请求状态为badrequest
});
这可以缩短:
var client = new HttpClient();
var data = new Dictionary<string,string>() { { "key","val"},{"key","val"},{"key","val"},{"key","val"} };
// or var data = new List<KeyValuePair<string, string>> { {new KeyValuePair<string, string>( "key","v")},{new KeyValuePair<string, string>( "key","v")},{new KeyValuePair<string, string>( "key","v")},{new KeyValuePair<string, string>( "key","v")}};
var Content = new FormUrlEncodedContent(data);
var res = client.PostAsync("post uri",Content).Result;
Console.WriteLine(res);
var-client=new-HttpClient();
var data=newdictionary(){{“key”,“val”},{“key”,“val”},{“key”,“val”},{“key”,“val”},{“key”,“val”};
//或var data=new List{{new KeyValuePair(“key”,“v”)}、{new KeyValuePair(“key”,“v”)}、{new KeyValuePair(“key”,“v”)}、{new KeyValuePair(“key”,“v”)};
var内容=新的FormUrlEncodedContent(数据);
var res=client.PostAsync(“post uri”,Content).Result;
控制台写入线(res);
表单url编码的内容不使用StringContent。以创建FormUrlEncodedContent
其余内容为例,好吗@CrowcoderIf如果我对它进行代码审查,它将失败,但代码审查并非如此。我一眼就注意到的唯一实际错误是您使用的内容类型。谢谢您的回复,但仍然是一个错误的请求。我们不需要为--header'内容类型:application/x-www-form-urlencoded'
?@SafiUllah内容类型
header与内容相关,而不是与实际请求相关,因此FormUrlEncodedContent
会处理它,而StringContent
是手动方法,因为您应该对内容进行编码,并且指定类型,这样就可以了。确保满足端点的请求要求。不需要其他任何东西。卷曲请求工作正常…感谢您的回答,它工作正常。。。把它标为答案