HttpClient帖子中包含参数

时间:2018-02-25 19:06:39

标签: c# postman dotnet-httpclient

我成功使用邮递员进行身份验证的帖子,但似乎无法从C#开始工作,获得401.密码和用户名验证与邮递员相同。有任何想法吗?这是我的代码:

            var url = AppConstants.ApiLoginUrl;
            var uriRequest = new Uri(url);
            string httpResponseBody;

            using (var httpClient = new Windows.Web.Http.HttpClient())
            { 
              var content = new HttpStringContent(string.Format("username={0}&password={1}", email, password), Windows.Storage.Streams.UnicodeEncoding.Utf8, "application/x-www-form-urlencoded");
                try
                {
                    var httpResponse = await httpClient.PostAsync(uriRequest, content); 

... }

以下是邮递员头部和正文的设置。

enter image description here

enter image description here

现在将此代码用于内容参数:

                var content = new HttpFormUrlEncodedContent(new[]
                {
                    new KeyValuePair<string, string>("username", email),
                    new KeyValuePair<string, string>("password", password)
                });

仔细观察,看起来用户名在Fiddler中为邮递员和代码请求编码。所以,我关于使用编码用户名的理论并不完全正确。这里有来自Fiddler的请求的快照...还有更多的建议/想法吗?

邮差标题:

Postman headers

代码标头: Code headers

Raw View Postman *显示已编码的用户名字段: Raw view revised

原始视图代码 Raw code

4 个答案:

答案 0 :(得分:1)

尝试将您的内容更改为以下

{{1}}

答案 1 :(得分:1)

我正在使用此功能发送带有参数的帖子请求,其中Dictionary<string, string> data作为Web服务预期的键值

public static T PostCast<T>(string url, Dictionary<string, string> data)
{
    using (HttpClient httpClient = new HttpClient())
    {
        var response = httpClient.PostAsync(url, new FormUrlEncodedContent(data)).Result;
        return response.Content.ReadAsAsync<T>().Result;
    }
}

希望有所帮助:)

答案 2 :(得分:1)

我的理解是,对于UWP应用程序,建议使用Windows.Web.Http.HttpClient(),并确保您的网址没有拼写错误。 :)

         var url = AppConstants.ApiLoginUrl;
            var uriRequest = new Uri(url);

            var content = new HttpFormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("username", email),
                new KeyValuePair<string, string>("password", password)
            });

            using (var httpClient = new Windows.Web.Http.HttpClient())
            {
                try
                {
                    var httpResponse = await httpClient.PostAsync(uriRequest, content); 

答案 3 :(得分:0)

我遇到了同样的问题,并通过从HttpClient发布到的URL中删除结尾的“ /”来解决了这个问题。