【问题标题】:UseExceptionHandler ASP.NET Core Web API使用异常处理程序 ASP.NET Core Web API
【发布时间】:2023-02-10 20:51:04
【问题描述】:

我正在尝试使用 app.UseExceptionHandler("/error"),这样我就可以使用 ProblemDetails 处理所有错误。

但是,我从来没有被重新路由到ErrorController。当我设置断点时,调试器永远不会进入该端点。

有谁知道为什么我没有达到断点?

program.cs 中的代码是:

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
{
    // Add services to the container.
    builder.Services.AddControllers();
    // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen();
    builder.Services
            .AddApplication()
            .AddAInfrastructure(builder.Configuration);
}

WebApplication app = builder.Build();
{
    if (app.Environment.IsDevelopment())
    {
        app.UseSwagger();
        app.UseSwaggerUI(q => q.SwaggerEndpoint("/swagger/v1/swagger.json","PowerPlanner v1"));
    }

    app.UseExceptionHandler("/error"); // <===============
    app.UseHttpsRedirection();
    app.UseRouting();
    app.UseAuthorization();
    app.MapControllers();
}

app.Run();

控制器:

using Microsoft.AspNetCore.Mvc;

[ApiController]
public class ErrorsController : ControllerBase
{
    [HttpGet("/error")]
    public IActionResult Error()
    {
        return Problem();
    }
}

【问题讨论】:

  • 我无法重现这个。将 WeatherForecast 控制器结果命中 ErrorController 中的异常的新项目归档。
  • 看起来我明白了,这是因为 GET 端点被重新路由到 ErrorsController 中的 GET 端点。我正在尝试使用 POST 端点进入错误的 GET 端点。有什么办法可以将所有内容重新路由到 1?当我尝试将属性更改为 [Route("/error")] 时,我得到一个 SwaggerGeneratorException: Ambiguous HTTP method for action

标签: c# error-handling swagger asp.net-core-webapi


【解决方案1】:

解决方案:

因为我使用了 Swagger,所以我无法在不出现错误的情况下使用属性 [Route("/error"]) 声明路由。为了解决这个问题,整个控制器必须标有:

[ApiExplorerSettings(IgnoreApi = true)]

像这样:

[ApiExplorerSettings(IgnoreApi = true)] //<==== 
public class ErrorController : ControllerBase
{
    [Route("/error")] //<=== this can only be 'route' when the controller is marked with ignoreApi=false
    public IActionResult ErrorPost()
    {
        return Problem(;
    }
}

文档:https://learn.microsoft.com/en-us/aspnet/core/web-api/handle-errors?view=aspnetcore-7.0

【讨论】:

    猜你喜欢
    • 2016-12-02
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多