Dynamics 365 CRM Plugin中呼叫第三方API的C#方法
/// <summary>
/// 呼叫外部API
/// </summary>
/// <param name="requestjson"></param>
/// <param name="interfacename"></param>
/// <param name="service"></param>
/// <returns></returns>
/// <exception cref="InvalidPluginExecutionException"></exception>
public static string PostApiSync(string requestjson, string interfacename,IOrganizationService service)
{
string returnval = string.Empty;
string url = string.Empty;
ConfigModel config = getInterfaceUrl(service, interfacename);
if (config == null || string.IsNullOrEmpty(interfacename) || string.IsNullOrEmpty(config.userId) || string.IsNullOrEmpty(config.inputKey) || string.IsNullOrEmpty(config.url))
{
throw new InvalidPluginExecutionException("Configuration is not ready for interface[" + interfacename + "] in CRM System Config.");
}
url = config.url;
if(string.IsNullOrEmpty(url))
{
throw new InvalidPluginExecutionException("SAP PI Interface URL is not ready for interface[" + interfacename + "] in CRM System Config.");
}
string authorization = config.userId + ":" + config.inputKey;
string base64AuthString = Convert.ToBase64String(Encoding.Default.GetBytes(authorization));
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("Authorization", "Basic " + base64AuthString);
client.DefaultRequestHeaders.ConnectionClose = false;
// client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", base64AuthString);
var content = new StringContent(requestjson, Encoding.UTF8, "application/json");
var response = client.PostAsync(url, content).Result;
if (response.IsSuccessStatusCode)
{
returnval = response.Content.ReadAsStringAsync().Result;
}
else
{
throw new InvalidPluginExecutionException(response.Content.ReadAsStringAsync().Result);
}
}
return returnval;
}