Не удалось загрузить тип 'System.Security.Cryptography.SHA256Cng' из сборки 'System.Core, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken =' - PullRequest
0 голосов
/ 23 апреля 2019

Я пытался подключить свое веб-приложение .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? Если это так, я был бы очень признателен, если бы кто-то из вас мог объяснить мне, как исправить эту ошибку. В противном случае ваши предложения действительно помогут мне решить эту проблему.

Заранее спасибо.

...