ASP.Net Core在调试模式下运行时没有抛出异常

5

我正在使用Visual Studio 2015 Update 3和ASP.NET Core。其中一个API(Account)依赖于使用Redis的缓存服务。

public AccountController(Cache.Contracts.ICacheManager cacheManager)
{
     _cacheManager = cacheManager;
}

当Redis未运行时,api / account不应工作,因为Cache Service应该连接到Redis。
在启动类中:
 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
 {      
     loggerFactory.AddConsole();
     loggerFactory.AddDebug();
 }

当请求api/account时

从Visual Studio运行项目

它会给出以下结果:

The localhost page isn’t working

localhost is currently unable to handle this request.

在使用dotnet run命令从powershell中运行时:

enter image description here

这也是异常设置。

enter image description here

问题

为什么在Visual Studio情况下不会抛出错误?我需要知道哪些错误导致了我的应用程序崩溃。


一个问题是,如果你只是使用VS中的“start without debugging”运行应用程序,是否会得到任何编译错误?对于未处理的异常,我们通常在Debug->Windows->Exception settings下启用它,但如果代码在调试期间没有真正被调用或存在编译错误,则不会抛出异常消息。 - Jack Zhai
没有复杂的错误,我也已经在异常窗口中检查了所有“公共语言运行时异常”。 - Hussein Salman
如果您查看输出窗口并选择“调试”下拉列表,您能否获取异常信息?我知道在启用/禁用JIT调试或其他操作后,在TOOLS->选项->调试->输出窗口->异常消息下,它可以在输出窗口中显示异常信息,而不是在调试期间抛出异常。 - Jack Zhai
1个回答

0

错误在请求管道中抛出。因此,您可能不会直接看到它。

添加开发者异常页面app.UseDeveloperExceptionPage()以查看详细信息,而不是一般消息,并/或添加自定义中间件来捕获每个请求发生的所有异常。在这种情况下,您可以设置断点并检查异常或记录它:

app.Use(async (ctx, next) =>
{
    try
    {
        await next.Invoke();
    }
    catch (Exception ex)
    {

    }
});

重要的是,在任何其他中间件或 .UseMvc 等之前,将此中间件添加到开头...


2
有没有办法让Visual Studio在用户代码中抛出异常时立即中断,而不需要诉诸于设置调试器异常设置窗口以在所有抛出的异常上中断? - Dai
你是指在控制器里吗?你可以在你的代码周围添加 try catch throw,并在 catch 中设置断点进行调试。否则,由于异常可能会在稍后被捕获/记录,所以这并不是真正的调试方法。 - MichaC
2
在普通的.NET中,无论是MVC、WebForms、WinForms还是其他表单,只要用户代码出现未处理的异常,调试器就会停止在该异常处。 - Evgeny Gorbovoy
在.NET Core Web API中,有没有一种立即抛出异常的方法? - O. Shai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接