[英]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.