Я пытался подключить свое веб-приложение .NET Core к API-интерфейсу Dynamics 365. Я использовал метод Auth. Этот метод читает из динамики 365 на основе запроса, заданного в качестве параметра.
public static async Task<JObject> Auth(string query)
{
string api = "https://mydomain.api.crm4.dynamics.com/api/data/v9.1/";
AuthenticationParameters ap = AuthenticationParameters.CreateFromResourceUrlAsync(new Uri(api)).Result;
var creds = new ClientCredential("application Id", "client key");
AuthenticationContext authContext = new AuthenticationContext(ap.Authority);
var token = authContext.AcquireTokenAsync(ap.Resource, creds).Result.AccessToken;
using (HttpClient httpClient = new HttpClient())
{
httpClient.Timeout = new TimeSpan(0, 2, 0);
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
HttpResponseMessage response = await httpClient.GetAsync(api + query);
if (response.StatusCode == HttpStatusCode.OK) //200
{
JObject RetrievedVersion = JsonConvert.DeserializeObject<JObject>(
await response.Content.ReadAsStringAsync());
return RetrievedVersion;
}
else
{
return (JObject)"Failed to retrieve the version for some reason";
}
}
}
Auth (запрос) вызывается в действии в контроллере в следующих строках кода:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var execute = Task.Run(async () => await Auth("/contacts?$select=fullname")).Result;
Однако я вижу ошибку, как показано ниже:
An unhandled exception occurred while processing the request.
AggregateException: One or more errors occurred. (One or more errors occurred. (Could not load type 'System.Security.Cryptography.SHA256Cng' from assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.))
System.Threading.Tasks.Task<TResult>.GetResultCore(bool waitCompletionNotification)
TypeLoadException: Could not load type 'System.Security.Cryptography.SHA256Cng' from assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformSpecificHelper.CreateSha256Hash(string input)
Stack Query Cookies Headers
AggregateException: One or more errors occurred. (One or more errors occurred. (Could not load type 'System.Security.Cryptography.SHA256Cng' from assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.))
System.Threading.Tasks.Task<TResult>.GetResultCore(bool waitCompletionNotification)
Projectname.Controllers.HomeController.Contacts() in HomeController.cs
+
var execute = Task.Run(async () => await Auth("/contacts?$select=fullname")).Result;
lambda_method(Closure , object , object[] )
Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(object target, object[] parameters)
Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
Код отлично работает и отлично выбирает данные из Dynamics 365 в консольном приложении.
Я пытался добавить пакет System.Security.Cryptography.Cng, но попытка решить проблему была неудачной.
Это способ реализации API Dynamics 365 в веб-приложении .NET Core 2.1 MVC? Если это так, я был бы очень признателен, если бы кто-то из вас мог объяснить мне, как исправить эту ошибку. В противном случае ваши предложения действительно помогут мне решить эту проблему.
Заранее спасибо.