• PostAsync与GetAsync


    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp3
    {
        class Program
        {
            static void Main(string[] args)
            {
            }
            /// <summary>
            /// PostAsync接口传参和接口不传参
            /// </summary>
            /// <returns></returns>
            public static string TestPostAsync()
            {
                var SSOUrl = "";
                string url = "api/BusinessMenuApi/CheckUrlPermission";
                //创建HttpClient(注意传入HttpClientHandler)
                var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
                var urlInfo = new UrlInfos { ModuleId = "", Url = "", BusinessCode = "" };
                var token = "";
                using (var http = new HttpClient(handler))
                {
                    http.BaseAddress = new Uri(SSOUrl);
                    http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
                    var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(urlInfo), Encoding.UTF8, "application/json");
                    var response = http.PostAsync(url, content).Result;//传参使用
                   // var response = http.PostAsync(url, null).Result;//不传参使用
                    //确保HTTP成功状态值
                    response.EnsureSuccessStatusCode();
    
                    //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
                    var result = response.Content.ReadAsStringAsync().Result;
                    var json = JsonConvert.DeserializeObject<dynamic>(result);
                    bool success = json.Success;
                    if (success)
                    {
                        JArray jo = json.Result;
                        string jos = jo.ToString();
                        JArray jo2 = json.Error;
                        string jos2 = jo2.ToString();
                        return jos;
                    }
                    else
                    {
                        return string.Empty;
                    }
                }
                }
        }
        public class UrlInfos
        {
            /// <summary>
            /// 菜单Id
            /// </summary>
            public string ModuleId { get; set; }
    
            /// <summary>
            /// 菜单地址
            /// </summary>
            public string Url { get; set; }
    
            /// <summary>
            /// 业务系统Code
            /// </summary>
            public string BusinessCode { get; set; }
    
            /// <summary>
            /// 菜单是否从SSO获取
            /// </summary>
            public bool IsMeunFromSSO { get; set; }
        }
    }
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp3
    {
        class Program
        {
            static void Main(string[] args)
            {
            }
            /// <summary>
            /// GetAsync接口传参和接口不传参
            /// </summary>
            /// <returns></returns>
            public static string TestPostAsync()
            {
                var SSOUrl = "";
                string url = "api/BusinessMenuApi/CheckUrlPermission/content=";
                //创建HttpClient(注意传入HttpClientHandler)
                var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
                var urlInfo = new UrlInfos { ModuleId = "", Url = "", BusinessCode = "" };
                var token = "";
                using (var http = new HttpClient(handler))
                {
                    http.BaseAddress = new Uri(SSOUrl);
                    http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
                    var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(urlInfo), Encoding.UTF8, "application/json");
                    var response = http.GetAsync(url + content).Result;//传参使用
                    //var response = http.GetAsync(url).Result;//不传参使用
                    //确保HTTP成功状态值
                    response.EnsureSuccessStatusCode();
    
                    //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
                    var result = response.Content.ReadAsStringAsync().Result;
                    var json = JsonConvert.DeserializeObject<dynamic>(result);
                    bool success = json.Success;
                    if (success)
                    {
                        JArray jo = json.Result;
                        string jos = jo.ToString();
                        JArray jo2 = json.Error;
                        string jos2 = jo2.ToString();
                        return jos;
                    }
                    else
                    {
                        return string.Empty;
                    }
                }
                }
        }
        public class UrlInfos
        {
            /// <summary>
            /// 菜单Id
            /// </summary>
            public string ModuleId { get; set; }
    
            /// <summary>
            /// 菜单地址
            /// </summary>
            public string Url { get; set; }
    
            /// <summary>
            /// 业务系统Code
            /// </summary>
            public string BusinessCode { get; set; }
    
            /// <summary>
            /// 菜单是否从SSO获取
            /// </summary>
            public bool IsMeunFromSSO { get; set; }
        }
    }

     2020-07-13补充

    项目中调用的三方接口需要在调用接口时添加Authorization的Digest Auth认证,需要加username和password,不然接口访问会报401错误

    如下是postman中可以这样测试

    https://blog.csdn.net/JENREY/article/details/86521391

    代码中解决方式

       var handler = new HttpClientHandler()
                {
                    AutomaticDecompression = DecompressionMethods.GZip,
                    Credentials = new
                               NetworkCredential("用户名", "密码")
                };

     这里修改一下就可以了。

    分享一种WebClient调用post和get的方式包含摘要认证方法

    调用:

     string sUrl = "http://localhost:8023/VIID/Dispositions";
                    var paramData = "";
                  var result = Request(sUrl, "POST", paramData, "test", "123456");
     public static string Request(string sUrl, string sMethod, string sEntity,string username, string password)
            {
                var sMessage = "";
                try
                {
                    using (System.Net.WebClient client = new System.Net.WebClient())
                    {
                        if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))//是否采用摘要认证
                        {
                            client.Credentials = CreateAuthenticateValue(sUrl, username, password);
                        }
                        WebHeaderCollection customerHeader = new WebHeaderCollection();
                        customerHeader.Add(HttpRequestHeader.Accept, "application/json,application/*+json");
                        customerHeader.Add(HttpRequestHeader.ContentType, "application/*+JSON;charset=UTF-8");                 
                        client.Headers = customerHeader;
    
                        Uri url = new Uri(sUrl);
                        byte[] bytes = Encoding.UTF8.GetBytes(sEntity);
                        byte[] buffer;
                        switch (sMethod.ToUpper())
                        {
                            case "GET":
                                buffer = client.DownloadData(url);
                                break;
                            case "POST":
                                buffer = client.UploadData(url, "POST", bytes);
                                break;
                            default:
                                buffer = client.UploadData(url, "POST", bytes);
                                break;
                        }
    
                        return Encoding.UTF8.GetString(buffer);
                    }
                }
                catch (WebException ex)
                {
                    sMessage = ex.Message;
                    var rsp = ex.Response as HttpWebResponse;
                    var httpStatusCode = rsp.StatusCode;
                    var authenticate = rsp.Headers.Get("WWW-Authenticate");
                    return "";
                }
                catch (Exception ex)
                {
                    sMessage = ex.Message;
                    return "";
                }
            }
    
            /// <summary>
            /// 摘要认证
            /// </summary>
            /// <param name="sUrl"></param>
            /// <param name="username"></param>
            /// <param name="password"></param>
            /// <returns></returns>
            private static CredentialCache CreateAuthenticateValue(string sUrl, string username, string password)
            {
                CredentialCache credentialCache = new CredentialCache();
                credentialCache.Add(new Uri(sUrl), "Digest", new NetworkCredential(username, password));
                return credentialCache;
            }

    扩展

    WebClient, HttpClient, HttpWebRequest ,RestSharp之间的区别与抉择

  • 相关阅读:
    python的数据类型+常用操作符
    厉害了
    git merge ignore line ending
    CNAME , DNS , A Record , Domain Name

    setcookie无效
    magic quote gpc htmlspecialchars
    整型 浮点型 不能转化
    git push -f带来的conflict如何解决
    git pull --rebase
  • 原文地址:https://www.cnblogs.com/macT/p/11044068.html
Copyright © 2020-2023  润新知