C# 发送 UrlEndcoded 表单数据
C# Sending UrlEndcoded Form Data
正在尝试在 Post 请求中发送 UrlEncoded 表单数据:
client.BaseAddress = new Uri("myURI");
var formContent = new MultipartFormDataContent();
formContent.Headers.ContentType.MediaType = "application/x-www-form-urlencoded";
formContent.Add(new StringContent("password"), "grant_type");
formContent.Add(new StringContent("someUser"), "username");
formContent.Add(new StringContent("somePassword"), "password");
HttpResponseMessage response = client.PostAsync("token", formContent).Result;
出于某种原因,请求 headers 包含以下内容:
somePassword
--7e556624-1d60-4321-a4ee-a85f6ab601c6
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=username
someUser
--7e556624-1d60-4321-a4ee-a85f6ab601c6
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=password
等...
Guid我猜是一个边界。但是,由于我使用了 urlencode,它应该是一个“?”边界.
事实上,如果我用 Postman 调用我的服务,使用相同的参数和 application/x-www-form-urlencoded
那么请求 headers 包含:
app_profile=freelancer&username=someUser&password=SomePassword&grant_type=password
那么如何使用 C# 实现这一点?
[编辑]
我设法让它像这样工作。但是我想了解原始代码有什么问题?
var values = new Dictionary<string, string>
{
{"username", "someUser"},
{"password", "somePassword"},
{"grant_type", "password"},
};
var formContent = new StringContent(JsonConvert.SerializeObject(values), Encoding.UTF8, "application/json");
HttpResponseMessage response = client.PostAsync("token", new FormUrlEncodedContent(values)).Result;
最初,您使用了 MultipartFormDataContent。
这意味着请求内容类型将替换为
multipart/form-data; boundary={一些随机生成的key}
并且请求正文将使用这个{一些随机生成的密钥}分成块
每个块都有自己的内容类型。
multipart/form-data 内容类型在与其他表单数据一起发送文件时特别有用。
在编辑的示例中,您使用的是 StringContent
正在尝试在 Post 请求中发送 UrlEncoded 表单数据:
client.BaseAddress = new Uri("myURI");
var formContent = new MultipartFormDataContent();
formContent.Headers.ContentType.MediaType = "application/x-www-form-urlencoded";
formContent.Add(new StringContent("password"), "grant_type");
formContent.Add(new StringContent("someUser"), "username");
formContent.Add(new StringContent("somePassword"), "password");
HttpResponseMessage response = client.PostAsync("token", formContent).Result;
出于某种原因,请求 headers 包含以下内容:
somePassword
--7e556624-1d60-4321-a4ee-a85f6ab601c6
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=username
someUser
--7e556624-1d60-4321-a4ee-a85f6ab601c6
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=password
等...
Guid我猜是一个边界。但是,由于我使用了 urlencode,它应该是一个“?”边界.
事实上,如果我用 Postman 调用我的服务,使用相同的参数和 application/x-www-form-urlencoded
那么请求 headers 包含:
app_profile=freelancer&username=someUser&password=SomePassword&grant_type=password
那么如何使用 C# 实现这一点?
[编辑]
我设法让它像这样工作。但是我想了解原始代码有什么问题?
var values = new Dictionary<string, string>
{
{"username", "someUser"},
{"password", "somePassword"},
{"grant_type", "password"},
};
var formContent = new StringContent(JsonConvert.SerializeObject(values), Encoding.UTF8, "application/json");
HttpResponseMessage response = client.PostAsync("token", new FormUrlEncodedContent(values)).Result;
最初,您使用了 MultipartFormDataContent。
这意味着请求内容类型将替换为 multipart/form-data; boundary={一些随机生成的key}
并且请求正文将使用这个{一些随机生成的密钥}分成块 每个块都有自己的内容类型。
multipart/form-data 内容类型在与其他表单数据一起发送文件时特别有用。
在编辑的示例中,您使用的是 StringContent