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之间的区别与抉择

posted on 2019-06-18 10:58  红磨坊后的白桦树  阅读(5226)  评论(0编辑  收藏  举报