asp.net 正在忽略UseExceptionHandler

woobm2wo  于 2023-03-20  发布在  .NET
关注(0)|答案(3)|浏览(172)

这是我在Startup.cs中的Startup()方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    if (env.IsDevelopment())
    {
        loggerFactory.AddNLog();
    }

    app.UseApplicationInsightsRequestTelemetry(); // Needs to be first
    app.UseExceptionHandler(errorApp =>
    {
        errorApp.Run(async context =>
        {
            context.Response.StatusCode = 500;
            context.Response.ContentType = "application/json";

            var error = context.Features.Get<IExceptionHandlerFeature>();
            if (error != null)
            {
                var ex = error.Error;

                await context.Response.WriteAsync(new ErrorResponse
                {
                    Code = 500,
                    Message = ex.Message
                }.ToString(), Encoding.UTF8);
            }
        });
    });
    app.UseApplicationInsightsExceptionTelemetry(); // After error page
    app.UseMvc();
}

这是我在控制器中的路线。

[HttpGet]
[Route("Test")]
public string Test()
{
    if(!string.IsNullOrEmpty(Request.Query["test"]))
        throw new Exception("Testing..");

    return "Hello.";
}

错误响应.cs

public class ErrorResponse
{
    public int Code { get; set; }

    public string Message { get; set; }

    public override string ToString()
    {
        return JsonConvert.SerializeObject(this);
    }
}

当我转到http://website/test时,它显示“Hello”。但当我转到http://website/test?test=asd时,它抛出我的异常(路由中的异常),而不是用UseExceptionHandler捕获它,并停止程序。
我的目标是让它显示以下json:

{
    "Error": 500,
    "Message": "Testing..."
}

我使用的是asp.net核心。

8zzbczxx

8zzbczxx1#

老职位,但我只是打同样的问题.
可能有一些异常过滤器全局应用。查找Startup.ConfigureServices中的MVC配置。我有services.AddMvcOptions(o => o.Filters.Add<ErrorHandlerAttribute>()),这是问题所在。

lzfw57am

lzfw57am2#

在我的例子中,app.UseDeveloperExceptionPage()已经捕获了异常,并且在某种程度上与这个中间件发生了冲突。

mlmc2os5

mlmc2os53#

你的应用程序在异常时停止,因为你在VS中以调试模式运行它,并且调试器已连接。例如,从控制台运行应用程序(或在VS中禁用“异常时中断”选项)。

相关问题