【发布时间】:2021-04-13 10:35:18
【问题描述】:
我尝试自定义默认行为,以便在我的 API 控制器内部出现异常时更改返回的内容。
我应用了我在文档中阅读的内容:https://docs.microsoft.com/en-us/aspnet/core/web-api/handle-errors?view=aspnetcore-5.0
Startup.cs:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "todo_list_app v1"));
}
else
{
app.UseExceptionHandler("/error");
}
[...]
}
ErrorController.cs:
[ApiController]
public class ErrorController : ControllerBase
{
[Route("/error-local-development")]
public IActionResult ErrorLocalDevelopment(
[FromServices] IWebHostEnvironment webHostEnvironment)
{
if (webHostEnvironment.EnvironmentName != "Development")
{
throw new InvalidOperationException(
"This shouldn't be invoked in non-development environments.");
}
var context = HttpContext.Features.Get<IExceptionHandlerFeature>();
return Problem(detail: context.Error.StackTrace, title: context.Error.Message);
}
[Route("/error")]
public IActionResult Error() => Problem();
}
【问题讨论】:
-
我不确定您是否愿意使用一些自定义异常处理程序,您可以在此处查看示例:stackoverflow.com/questions/66222731/…
-
看起来不错,但我想了解为什么原版在我的情况下不起作用。
-
您是否在本地开发环境中运行?
-
我在本地工作,但我构建了版本并通过重命名数据库中的表故意导致异常。
-
如果您尝试直接访问
/error会怎样?
标签: c# asp.net-core