public static string getAccessToken()
{
var client = new RestClient("...");
client.Timeout = -1;
var request = new RestRequest() { Method = Method.POST };
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("client_id", "...");
request.AddParameter("client_secret", "...");
IRestResponse token = client.Execute(request);
string varToken = token.Content;
return varToken;
}
这种获取令牌的方法有效!但是使用该令牌的方法抛出NullReferenceException";对象引用未设置为对象的实例";
public static string testAccessToken(string token)
{
var client = new RestClient("...");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer " + token);
IRestResponse response = client.Execute(request);
string varToken = response.Content;
return varToken;
}
当我在Visual Studio窗体应用程序中测试方法testAccessToken(字符串令牌(时,它可以工作,但当我使用它BizTalk时,它会抛出一个NullReferenceException";对象引用未设置为对象的实例";
有人知道如何解决这个问题吗?
问题已解决。尽管在一个示例WindowsForm应用程序中,创建的Restsharp类返回了一个结果,但Biztalk中的同一个类没有返回任何结果。原因是TLS加密。许多服务器仍然允许TLS 1.0到1.2,但OAuth2环境中的服务器明确允许1.2,包括用于Business Central的Mircosoft服务器。
通往目标有两条路。首先,将TLS 1.2设置为Windows中的默认协议。为此需要手动更改注册表。但是,客户服务器上的这些更改可能会导致客户的其他应用程序无法再进行通信。
更好的方法是在每次调用时告诉Restsharp应该使用哪种加密。"System.Net.ServicePointManager.SecurityProtocol=System.Net.SecurityPProtocolType.Tls12";
瞧,Biztalk终于从课堂上得到了一个结果。