gpt4 book ai didi

c# - ASP.Net Core异常处理中间件

转载 作者:行者123 更新时间:2023-12-03 16:56:54 25 4
gpt4 key购买 nike

我正在尝试将中间件用于ASP.Net Core 3.0 Web API项目中的异常处理:

public class ErrorHandlingMiddleware
{
private readonly RequestDelegate next;

public ErrorHandlingMiddleware(RequestDelegate next)
{
this.next = next;
}

public async Task Invoke(HttpContext context)
{
try
{
await next(context);
}
catch (Exception ex)
{
await HandleException(context, ex);
}
}

private static Task HandleException(HttpContext context, Exception ex)
{
HttpStatusCode code = HttpStatusCode.InternalServerError; // 500 if unexpected

// Specify different custom exceptions here
if (ex is CustomException) code = HttpStatusCode.BadRequest;

string result = JsonConvert.SerializeObject(new { error = ex.Message });

context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)code;

return context.Response.WriteAsync(result);
}
}

startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}

public IConfiguration Configuration { get; }

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add controllers with a route prefix
services.AddControllers(x => { x.UseGeneralRoutePrefix($"api/v{Configuration["APIVersion"]}"); });
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v0.1", new OpenApiInfo { Title = "My API", Version = "v0.1" });
});
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseHttpsRedirection();

app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v0.1/swagger.json", "My API V1");
});

app.UseMiddleware(typeof(ErrorHandlingMiddleware));

app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}

Controller
[HttpPost]
public ActionResult Method()
{
if (condition)
throw new CustomException();
else
return Ok();
}

但是 Controller 中抛出的异常不会被中间件处理。使用中间件的正确方法是什么?

最佳答案

看起来

app.UseDeveloperExceptionPage();

阻止了异常处理中间件捕获异常。删除它可以解决问题。

关于c# - ASP.Net Core异常处理中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58821308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com