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