В моем Startup.cs,
public virtual void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory,
IMemoryCache cache, CountyServicePaymentsContext countyServicePaymentsContext, PortalContext portalContext,
IPortalCountyInfoService portalCountyInfoService, ICountyServicePaymentService countyServicePaymentService)
{
app.UseSession();
// Route the errors to the proper place based upon Dev or NOT...
if (env.IsDevelopment())
{
//app.UseBrowserLink();
//app.UseDeveloperExceptionPage();
loggerFactory.AddConsole();
loggerFactory.AddDebug();
}
app.UseExceptionHandler("/Error");
app.UseStatusCodePagesWithReExecute("/Errors/Error{0}");
...
Ниже мой фильтр страницы (который используется для загрузки некоторых данных из файла cookie) и перенаправления в случае, если файл cookie не создан,
public class PortalInfoFilter : IPageFilter
{
private readonly string _trackingId;
private readonly ILogger<PortalInfoFilter> _logger;
public PortalInfoFilter(IConfiguration configuration,
ILoggerFactory loggerFactory)
{
_trackingId = configuration["GoogleAnalytics:TrackingID"];
_logger = loggerFactory.CreateLogger<PortalInfoFilter>();
}
public void OnPageHandlerExecuting(PageHandlerExecutingContext context)
{
try {
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
string pci = null;
var curPage = string.Empty;
if (context?.HttpContext?.Session != null)
{
if (string.IsNullOrEmpty(_trackingId))
{
_logger.LogError("Google Analytics TrackingID is empty!");
}
context.HttpContext.Session.SetString(Constants.TrackingId, _trackingId);
pci = context.HttpContext.Request.Cookies[Constants.CountyInfoCookieName];
curPage = context.HttpContext.Request.Path.ToString().ToLower();
}
var portalCountyInfo = new PortalCountyInfoDto();
if (pci != null)
{
if (pci.Length > 0)
{
try
{
portalCountyInfo = JsonConvert.DeserializeObject<PortalCountyInfoDto>(pci);
}
catch (Exception ex)
{
_logger.LogCritical(
$"Unable to deserialize and initialize portalCountyInfo from cookie = {Constants.CountyInfoCookieName} {ex}.",
ex);
// If there is any issues on the portal county info, blank it...
portalCountyInfo = null;
throw new PageHandlerExecutionAsyncException("Something unexpected happened while attempting to deserialize PortalCountyInfo.", ex);
}
}
}
else
{
portalCountyInfo = null;
}
if (portalCountyInfo != null)
{
ConfigurePortalCountyInfoContextSession(ref context, portalCountyInfo);
}
curPage = curPage.Trim();
if (curPage.Equals("/") || curPage.Equals("/index")) curPage = "/home";
context?.HttpContext?.Session?.SetString(Constants.CurrentPage, curPage);
if ((curPage.InStr("/search") || curPage.InStr("/checkout")) && portalCountyInfo == null)
{
if (context != null)
{
context.Result = new RedirectResult(Constants.HomePage);
}
}
}
catch (Exception ex)
{
_logger.LogCritical($"Something unexpected happened {ex}", ex);
throw new PageHandlerExecutionAsyncException("Something unexpected happened.", ex);
}
}
Я создал фильтр исключений и могу отлавливать там исключения из фильтра страниц, но после этого исключение, похоже, не следует за промежуточным программным обеспечением и не обрабатывается
app.UseExceptionHandler("/Error");
app.UseStatusCodePagesWithReExecute("/Errors/Error{0}");
в Startup.cs
Я не совсем понимаю, что происходит после того, как это исключение выдается (поток через промежуточное ПО).
Может ли кто-нибудь помочь мне понять, что происходит с этим исключением после того, как оно было сгенерировано, и почему оно не обрабатывается моими пользовательскими страницами? Как отобразить страницу с пользовательской ошибкой при возникновении этого исключения?
Я попытался создать промежуточное ПО для пользовательских исключений, и это исключение не проходит через него.
Любая помощь приветствуется.