#c# #asp.net-core #.net-core #identityserver4 #.net-5
Вопрос:
У меня есть два проекта, один на .NET 5, а другой на .NET Core 3.1.
В последнее время я включил ведение журнала электронной почты, отправляя мне электронные письма всякий раз, когда возникает ошибка.
Время от времени я получаю электронное письмо со следующей ошибкой:
[Error] An unhandled exception has occurred while executing the request. System.Threading.Tasks.TaskCanceledException: A task was canceled. at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.GetConfigurationAsync(CancellationToken cancel) at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync() at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync() at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.AuthenticateAsync() at Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Serilog.AspNetCore.RequestLoggingMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.lt;Invokegt;g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)
Проблема в том, что ошибка никогда не возникает в локальной среде разработки, и это, вероятно, соответствует некоторой нестабильности сети, но я не уверен, с чего начать поиск.
Для настройки всего приложения я использую следующую инициализацию, позволяющую вводить объект AppSettings в любой класс:
services.Configurelt;AppSettingsgt;(Configuration); var appSettings = Configuration.Getlt;AppSettingsgt;(); var mqServerConnection = appSettings.MQServerConnection; var identiyServerConfig = Configuration.GetSection(nameof(appSettings.IdentiyServerConnection)); services.Configurelt;IdentiyServerConnectiongt;(identiyServerConfig); var mqServerConfig = Configuration.GetSection(nameof(appSettings.MQServerConnection)); services.Configurelt;MQServerConnectiongt;(mqServerConfig);
И тогда я смогу использовать настройки приложений в качестве:
public MyClassCtor(IOptionslt;AppSettingsgt; options) { var appSettings = options.Value; }
Кроме того, для аутентификации я использую существующий сервер идентификации, и вот как я интегрируюсь с ним:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, config =gt; { config.Authority = appSettings.IdentiyServerConnection.Authority; config.Audience = appSettings.IdentiyServerConnection.Audience; config.RequireHttpsMetadata = appSettings.IdentiyServerConnection.RequireHttpsMetadata; config.BackchannelHttpHandler = WebHostEnvironment.IsProduction() ? new HttpClientHandler() : new HttpClientHandler { ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator }; if (WebHostEnvironment.IsDevelopment()) { config.TokenValidationParameters.ClockSkew = TimeSpan.FromDays(10); } });
А затем использовать эту форму аутентификации:
••• app.UseAuthentication(); •••
Опять же, не знаю, с чего начать поиски, буду очень признателен за любую помощь, заранее спасибо..
Комментарии:
1. Привет @bfahm, вы можете добавить регистратор в свой проект, чтобы узнать, где возникла такая проблема.