Я делаю обработку исключений на уровне приложения в .NetCore 2.2. Но столкнулся с некоторой проблемой
Так что в моем файле startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
//app.UseDeveloperExceptionPage();
app.UseExceptionHandler("/GlobalException");
app.UseStatusCodePagesWithReExecute("/Error/{0}");
}
else
{
app.UseExceptionHandler("/GlobalException");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
//app.UseAuthentication();
app.UseSession();
//app.UseCookiePolicy();
app.UseMiddleware<AuthenticationMiddleware>();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Account}/{action=Index}/{id?}");
});
}
и ExceptionController.cs есть
public class ExceptionController : Controller
{
[Route("Error/{statusCode}")]
public IActionResult HttpStatusCodeHandler(int statusCode)
{
var statusCodeResult = HttpContext.Features.Get<IStatusCodeReExecuteFeature>();
switch (statusCode)
{
case 404:
ViewBag.ErrorMessage = "Sorry, the resource you requested could not be found";
break;
default:
ViewBag.ErrorMessage = "Sorry, the resource you requested could not be found";
break;
}
return View();
}
[AllowAnonymous]
[Route("GlobalException")]
public IActionResult GlobalException()
{
var exceptionHandlerPathFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();
var exceptionPath = exceptionHandlerPathFeature.Path;
var exceptionMessage = exceptionHandlerPathFeature.Error.Message;
var exceptionStackTrace = exceptionHandlerPathFeature.Error.StackTrace;
ViewBag.ErrorMessage = "Sorry, the resource you requested could not be found";
//return await HttpContext.Response.Body.WriteAsync(JsonConvert.SerializeObject("he"));
//return View("GlobalException");//"~/Views/Shared/HttpStatusCodeHandler.cshtml"
return View("~/Views/Exception/GlobalException.cshtml");
}
}
AuthenticationMiddleware.cs
public async Task Invoke(HttpContext context)
{
bool isAjaxCall = context.Request.Headers["x-requested-with"] == "XMLHttpRequest";
if(isAjaxCall)
{
// someAjax related functionality.
}
else if (!context.Request.Path.Value.Contains("/account/Index"))
{
if (context.Session.Keys.Contains("UserName"))
{
await _next.Invoke(context);
}
else
{
context.Response.Redirect("/account/Index");
}
}
else if (context.Request.Path.Value.Contains("/GlobalException"))
{
await _next.Invoke(context);
}
await _next.Invoke(context);
}
Я могу перейти на все страницы исключений, когда я получаю 404, и другие ошибки. Но когда в приложении возникает любое исключение времени выполнения. GlobalException () выполняется, но в интерфейсе пользователя он не перемещается в этом представлении.
Попытка вызвать исключение для целей тестирования
public ActionResult RaiseException()
{
throw new Exception();
}
Может кто-нибудь помочь мне с этим, так как я борюсь с двух дней. Пожалуйста, предоставьте мне лучший подход, если это возможно. Спасибо.