C# .NET 调用API接口和SOAP接口的基本身份验证

调用API接口:

首先需要 CredentialCache 对象,然后设置NetworkCredential 的用户名密码和Basic;最后需要在request的Headers中加上Authorization节点,此节点是由basic和用户名+密码的ASCIIEncoding类型的二进制字符串组成的。request的PreAuthenticate属性必须设置成true。

 CredentialCache cache = new CredentialCache();
            NetworkCredential nc = new NetworkCredential(userName, password);
            cache.Add(new Uri(url), "Basic", nc);
            request.PreAuthenticate = true;
            request.Credentials = cache;
            request.Headers.Add("Authorization",
                "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes($"{userName}:{password}")));

调用SOAP接口:

设置了NetworkCredential对象的用户名和密码

service.Credentials = new NetworkCredential(securelyStoredUserName, securelyStoredPassword);

我在项目中只设置了NetworkCredential就验证成功了,所以就没有用下面的方式,如果有验证不成功,除了用户名密码不正确,可以采用下面的方式。

1.在初始化SOAP类时,需要先将NetworkCredential赋值

service.Credentials = new NetworkCredential(securelyStoredUserName, securelyStoredPassword);

2.需要在根据wsdl生成的类中添加拦截request请求 直接在headers中添加上Authorization节点

        protected override WebRequest GetWebRequest()
        {
            Uri u = new Uri(Url + "?wsdl");//由于当时没有用到此方法 不清楚获取uri时 需不需要加上?wsdl,用到的自己测试。
            HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(u);
            if (PreAuthenticate)//使用时,必须设置服务类的PreAuthenticate属性为true并设置Credentials属性
            {
                NetworkCredential networkcredential = base.Credentials.GetCredential(uri, "Basic");
                if (networkcredential != null)
                {
                    request.Headers.Add("Authorization",
                        "Basic " + Convert.ToBase64String(new UTF8Encoding().GetBytes($"{networkcredential.UserName}:{networkcredential.Password}")));
                }
                else
                    throw new ApplicationException("No network credentials");
            }
            return request;
        }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值