C# 如何将用户重定向到错误页面并在.NETCore的日志文件中记录错误
我正在开发一个.NET核心web应用程序,我的要求是在全球范围内处理错误 因此,为了实现这种行为,我尝试使用内置中间件 Startup.csC# 如何将用户重定向到错误页面并在.NETCore的日志文件中记录错误,c#,exception-handling,.net-core,asp.net-core-mvc,C#,Exception Handling,.net Core,Asp.net Core Mvc,我正在开发一个.NET核心web应用程序,我的要求是在全球范围内处理错误 因此,为了实现这种行为,我尝试使用内置中间件 Startup.cs public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler(new ExceptionHandlerOptions {
ExceptionHandlingPath = "/Home/Error",
ExceptionHandler = async (context) => {
var exceptionFeature = context.Features.Get<IExceptionHandlerFeature>();
if (exceptionFeature != null)
{
Log.Error(exceptionFeature.Error, exceptionFeature.Error.Message);
}
}
});
}
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
}
HomeController.cs
public async Task<IActionResult> Error(string errorId)
{
var exceptionFeature = HttpContext.Features.Get<IExceptionHandlerFeature>();
if (exceptionFeature != null)
{
Log.Error(exceptionFeature.Error, exceptionFeature.Error.Message);
}
}
公共异步任务错误(字符串错误ID)
{
var exceptionFeature=HttpContext.Features.Get();
if(exceptionFeature!=null)
{
Log.Error(exceptionFeature.Error,exceptionFeature.Error.Message);
}
}
上面的解决方案对我来说是可行的,但在控制器中记录全局错误是一种好的做法吗?任何线索都会被告知
谢谢 这两个属性是相互排斥的, ExceptionHandlingPath=“/Home/Error”, 例外处理程序 i、 例如,其中任何一个都将被应用,这就是为什么重定向不会在home/error中发生。如果您将删除exceptionHandler,它将对您起作用,但是您需要在控制器中进行日志记录,这是您所做的第二次实现的一部分,并且在该控制器/操作完成所有操作之前,以这种方式进行日志记录是没有害处的 当我说所有的时候,这意味着有401个错误,404个错误,这些错误将不会被当前的方法处理,为此,您应该使用statusCode基本方法 更好的方法是您有多个错误页面的实现: 1.404:路线不存在的地方 2.500:应用程序错误(所有情况) 3 401:如果涉及某种授权 .NETCore提供了许多错误处理机制(包括用于异常处理的GlobalFilterAttribute)。然而,若您有一个面向公众的应用程序,那个么您的目标应该是向用户显示友好的错误页面并记录rest 你可以读到它