PostAsync不添加查询字符串参数

时间:2015-09-02 16:45:59

标签: c# api post

我有一个简单的软件:我需要向带有参数的Web API发送POST请求。

所以我使用以下代码:

using (HttpClient httpClient = new HttpClient { BaseAddress = "http://localhost:51074" })
{

    var content = new FormUrlEncodedContent(new[] 
                     {
                        new KeyValuePair<string, string>("param1", param1),
                        new KeyValuePair<string, string>("param2", param2),
                        new KeyValuePair<string, string>("param3", param3)
                     });

    string uri = "/api/Authenticate";
    var response = httpClient.PostAsync(uri, content);

}

但无论我尝试什么,查询字符串参数都不会添加到我的请求中。 我收到400 - Not Found错误。

我不知道为什么没有添加参数。 如果我只是手动将参数添加到我的uri,例如:

string uri = "/api/Authenticate?param1=param1&param2=param2&param3=param3";

PostAsync工作正常。

这让我发疯。我希望有人有解决方案。

我需要发送一个url作为参数,这就是我需要使用FormUrlEncodedContent的原因

1 个答案:

答案 0 :(得分:0)

我认为您收到错误是因为您的Web Api的Post方法不期望复杂类型(System.Net.Http.FormUrlEncodedContent)。它期待字符串。我猜你的Web Api方法目前看起来像这样:

    public void Post([FromBody]string value)
    {
    }

您应该将其更改为

    public void Post([FromBody]System.Net.Http.FormUrlEncodedContent value)
    {

    }

通过这种方式,它将知道预期的类型。