我是中间件概念的新手,我目前正在努力处理我的MVC Core项目中的异常.
我想要发生的是捕获,记录异常,然后将用户发送到带有消息的友好错误页面.起初,我试图在中间件中管理所有这些,但意识到我可能没有正确地做到这一点.
因此,如果我希望这个流程发生,我应该使用我的异常日志记录中间件和app.UseExceptionHandler("/ Error"),以便中间件重新抛出异常到页面?如果是这样,我如何在错误页面中获取异常详细信息?我想先截取的异常处理机制应该是Configure中的最后一个,这是正确的吗?
我发现的所有示例都严格处理HTTP状态代码错误,如404; 我正在寻找处理实际的异常(及其子类).这样,在我的View页面中,我可以在适用的情况下抛出自己的异常(例如,如果为必填字段提供了一个null.)
Startup.cs片段:
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory, LoanDbContext context) {
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseStatusCodePages();
if (env.IsDevelopment() || env.IsEnvironment("qa")) {
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
} else {
app.UseExceptionHandler("/Error");
}
app.UseMiddleware<MyExceptionHandler>(loggerFactory);
// ... rest of Configure is irrelevant to this issue
Run Code Online (Sandbox Code Playgroud)
MyExceptionHandler.cs
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using System;
using System.Data.SqlClient;
using System.Threading.Tasks;
namespace MyCompany.MyProject.Helpers
{
/// <summary>
/// A custom Exception Handler Middleware which can be re-used in other projects.
/// </summary>
public sealed …Run Code Online (Sandbox Code Playgroud) c# exception-handling asp.net-core-mvc asp.net-core asp.net-core-middleware