Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将用户重定向到错误页面并在.NETCore的日志文件中记录错误_C#_Exception Handling_.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 如何将用户重定向到错误页面并在.NETCore的日志文件中记录错误

C# 如何将用户重定向到错误页面并在.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(

我正在开发一个.NET核心web应用程序,我的要求是在全球范围内处理错误

因此,为了实现这种行为,我尝试使用内置中间件

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);
                        }
                    }
                });
            }
     }
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

你可以读到它