![](/img/trans.png)
[英]How to get redirect Log from TestServerFixture to ITestOutputHelper in .net Core?
[英]How to redirect user to Error page and log errors in log file in .NET core
我正在开发.NET核心Web应用程序,我的要求是全局处理错误。
因此,为了实现此行为,我尝试将中间件UseExceptionHandler中的构建与ExceptionHandlerOptions一起使用。
Startup.cs
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);
}
}
});
}
}
上面的代码将错误记录在日志文件中,但是永远不要将用户重定向到错误页面。 当我删除ExceptionHandler函数时,它可以正常工作,并将用户重定向到错误页面。 如果我错过了什么,请纠正我。
我希望用户在发生任何未处理的异常时应重定向到错误页面,并将错误记录在日志文件中。
我针对此问题的解决方法:
Startup.cs
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);
}
}
上面的解决方案对我有用,但是在控制器中记录全局错误是一种好习惯吗? 任何线索将被申请。
谢谢!
这两个属性是互斥的,ExceptionHandlingPath =“ / Home / Error”,ExceptionHandler,即将应用其中一个,这就是为什么重定向不会在home / error中发生的原因。 如果要删除exceptionHandler,它将为您工作,但是您需要在控制器中进行日志记录,这是您执行的第二个实现的一部分,并且以这种方式记录日志直到此控制器/操作执行完为止没有危害。处理一切。
当我说所有内容时,这意味着存在401错误,404错误,当前的方法将无法处理,为此,您应该使用statusCode基本方法。
更好的方法是对错误页面进行多种实现:1. 404:不存在路由2. 500:应用程序错误(在所有情况下)3401:是否涉及某种授权。
.net核心提供了许多错误处理机制(包括用于异常处理的Globalfilter属性)。 但是,如果您有一个面向公众的应用程序,则应针对向用户显示友好的错误页面并记录休息。
你可以在这里阅读
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.