Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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# 即使使用异常处理中间件,也能中断异常_C#_Asp.net Core_Visual Studio 2017_Asp.net Core Mvc - Fatal编程技术网

C# 即使使用异常处理中间件,也能中断异常

C# 即使使用异常处理中间件,也能中断异常,c#,asp.net-core,visual-studio-2017,asp.net-core-mvc,C#,Asp.net Core,Visual Studio 2017,Asp.net Core Mvc,我的ASP.NET核心应用程序中有以下中间件: public class ExceptionHandlingMiddleware : IMiddleware { // Constructor and other stuff... public async Task InvokeAsync(HttpContext context, RequestDelegate next) { try { await next(co

我的ASP.NET核心应用程序中有以下中间件:

public class ExceptionHandlingMiddleware : IMiddleware
{
    // Constructor and other stuff...

    public async Task InvokeAsync(HttpContext context, RequestDelegate next)
    {
        try
        {
            await next(context);
        }
        catch (Exception ex)
        {
            _logger.Error(ex, "An unhandled exception was thrown!");

            await HandleExceptionAsync(context, ex);
        }
    }

    private async Task HandleExceptionAsync(HttpContext context, Exception ex)
    {
        // Handle exception and return a human-readable
        // message in a JSON-object in the response...
    }
}
我将其添加到Startup.cs中的管道中

app.UseMiddleware<ExceptionHandlingMiddleware>();
app.UseMiddleware();
从VisualStudio运行应用程序时,当发生异常时,调试器不会中断,而只是在中间件中处理,并继续执行。但是,我希望调试器在抛出异常的地方中断,而此时除了此中间件之外,其他任何东西都无法捕获异常我如何做到这一点?

实际上,我尝试在本地运行时不添加此中间件。例如,在Startup.cs中执行以下操作:

// I'm setting env to "none" when running locally
if (!env.IsEnvironment("none"))
{
    app.UseMiddleware<ExceptionHandlingMiddleware>();
}
//在本地运行时,我将env设置为“none”
如果(!环境为环境(“无”))
{
app.UseMiddleware();
}

但这似乎只是导致前端的行为有所不同——这是可以理解的,因为它没有接收可读的JSON对象,但它让我认为问题不在于我的中间件。我更愿意保持此中间件处于活动状态,但如果无法在调试器正常中断时保持活动状态,我想我可以接受。

您应该能够在VS中“后退”,如果没有,只需注释try/cach,它会在实际错误时中断。当然,但现在需要我在该中间件中手动设置断点,因为调试器不会自动中断。如果我没记错的话,在ASP.NET中,Global.asax中有一个方法,它允许您全局处理异常,但仍然允许调试器通过在异常发生的位置中断来正常运行thrown@Jite同时注释掉这些行只会给出与不连接中间件相同的行为。调试器仍然不可用break@Kahbazi你能用这个链接详细说明你指的是什么吗?将异常配置为“抛出时中断”意味着即使我有catch子句来捕获它,调试器也会中断。我对这个不感兴趣。