C# VisualStudio2012中的HTTPClient帖子
我想将数据发布到REST API,但它不会创建正确的请求:C# VisualStudio2012中的HTTPClient帖子,c#,dotnet-httpclient,C#,Dotnet Httpclient,我想将数据发布到REST API,但它不会创建正确的请求: using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("Accept", "text/csv"); HttpResponseMessage response = null; string baseUrl = ServiceUrl + "/api/v25/upload/test"; Dictionary<string, string>
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Accept", "text/csv");
HttpResponseMessage response = null;
string baseUrl = ServiceUrl + "/api/v25/upload/test";
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("field1", "value1");
parameters.Add("field2", "value2");
MultipartFormDataContent form = new MultipartFormDataContent();
HttpContent content = new StringContent("long text...");
content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
HttpContent fields = new FormUrlEncodedContent(parameters);
form.Add(content, "message");
form.Add(fields);
response = client.PostAsync(baseUrl, form).Result;
var message = response.Content.ReadAsStringAsync().Result;
}
使用(var-client=new-HttpClient())
{
client.DefaultRequestHeaders.Add(“接受”、“文本/csv”);
HttpResponseMessage响应=null;
字符串baseUrl=ServiceUrl+“/api/v25/upload/test”;
字典参数=新字典();
参数。添加(“字段1”、“值1”);
参数。添加(“字段2”、“值2”);
MultipartFormDataContent form=新的MultipartFormDataContent();
HttpContent=新的StringContent(“长文本…”);
content.Headers.ContentType=新的MediaTypeHeaderValue(“文本/csv”);
HttpContent字段=新FormUrlEncodedContent(参数);
形式。添加(内容,“信息”);
表单。添加(字段);
response=client.PostAsync(baseUrl,form).Result;
var message=response.Content.ReadAsStringAsync().Result;
}
它使这个URL:
POST/api/v25/upload/test HTTP/1.1
这就是正确的地址:
POST/api/v25/upload/test?字段1=value1和字段2=value2 HTTP/1.1
请问代码中的错误在哪里?HttpClient没有允许您生成查询字符串的API。有关使用
HttpUtility.ParseQueryString
执行此操作的代码,请参阅
或改用:
为什么您认为将文件添加到表单的帖子会导致将参数添加到URL?只有get使用URL中的字段..是的,我明白了。非常感谢。
var request = new RestRequest("/api/v25/upload/test", Method.POST);
request.AddParameter("field1", "value1", ParameterType.UrlSegment);