zoukankan      html  css  js  c++  java
  • C# HttpWebRequest of type “application/x-www-form-urlencoded”

    C# HttpWebRequest of type “application/x-www-form-urlencoded” - how to send '&' character in content body?

    First install "Microsoft ASP.NET Web API Client" nuget package:

      PM > Install-Package Microsoft.AspNet.WebApi.Client

    Then use the following function to post your data:

    public static async Task<TResult> PostFormUrlEncoded<TResult>(string url, IEnumerable<KeyValuePair<string, string>> postData)
    {
        using (var httpClient = new HttpClient())
        {
            using (var content = new FormUrlEncodedContent(postData))
            {
                content.Headers.Clear();
                content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
    
                HttpResponseMessage response = await httpClient.PostAsync(url, content);
    
                return await response.Content.ReadAsAsync<TResult>();
            }
        }
    }

    And this is how to use it:

    TokenResponse tokenResponse = 
        await PostFormUrlEncoded<TokenResponse>(OAuth2Url, OAuth2PostData);

    or

    TokenResponse tokenResponse = 
        (Task.Run(async () 
            => await PostFormUrlEncoded<TokenResponse>(OAuth2Url, OAuth2PostData)))
            .Result

    or (not recommended)

    TokenResponse tokenResponse = 
        PostFormUrlEncoded<TokenResponse>(OAuth2Url, OAuth2PostData).Result;

    可以参考的是FormUrlEncodedContent的使用,下面SendAsync是HttpClient的方法

      var data = new Dictionary<string, string>
                {
                    {"on", $"{false}"},
                    {TokenHelper.TokenName, TokenHelper.TokenValue}
                };
                var content = new FormUrlEncodedContent(data);
                var request = new HttpRequestMessage
                {
                    Method = HttpMethod.Patch,
                    RequestUri = new Uri($"{_setupFixture.Client.BaseAddress}SelfRegistration/Switch"),
                    Content = content
                };
                //request.Headers.Add(TokenHelper.TokenName, TokenHelper.TokenValue);
                //request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                var response = await _setupFixture.Client.SendAsync(request);
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
  • 相关阅读:
    JVM调优总结(转载)
    项目应该如何分层(转载)
    SpringCloud Feign 配置(基于Consul)
    yml配置文件嵌套
    SpringCloud Zuul基于Consul配置及详解
    springBoot聚合项目打包
    SpringCloud Config 配置(基于Consul)
    hibernate的三种状态
    IOS 图片全屏预览
    IOS 下拉菜单
  • 原文地址:https://www.cnblogs.com/chucklu/p/13713968.html
Copyright © 2011-2022 走看看