【发布时间】:2021-05-28 22:26:46
【问题描述】:
我在启动中
(更新:解决方案是将 UseRouting 移到 /api/error 路由下)
app.UseRouting();
if (env.IsDevelopment()) {
app.UseExceptionHandler("/api/error/error-local-development");
SwaggerConfig.Configure(app);
}
else {
app.UseExceptionHandler("/api/error/error");
}
app.UseCors();
app.UseHttpsRedirection();
app.UseDefaultFiles();
app.UseSpaStaticFiles();
app.UseAuthentication();
app.UseAuthorization();
app.UseRequestLocalization(options);
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHub<ResultHub>("/hubs/resultHub");
});
app.UseSpa(spa =>
{
spa.Options.SourcePath = "wwwroot";
});
但是当throw new Exception() 在控制器操作中时,永远不会调用错误控制器方法。
[Route("api/error")]
[ApiController]
[ApiExplorerSettings(IgnoreApi = true)]
public class ErrorController : OwnBaseController
{
public ErrorController(IApplicationUserService applicationUserService, ILogger<ErrorController> logger, IDiagnosticContext diagnosticContext) : base(applicationUserService, logger, diagnosticContext)
{
}
[Route("error")]
public IActionResult Error()
{
return Problem();
}
[Route("error-local-development")]
public IActionResult ErrorLocalDevelopment([FromServices] IWebHostEnvironment webHostEnvironment)
{
var context = HttpContext.Features.Get<IExceptionHandlerFeature>();
return Problem(
detail: context.Error.StackTrace,
title: context.Error.Message);
}
}
【问题讨论】:
-
接下来会发生什么?我的意思是应用程序崩溃还是日志中出现异常?还是 xyz?
-
在调试模式中,我在手册“抛出异常”serilog 日志中看到“在 xxx.dll 中发生了类型 xx 的异常,但未在用户代码中处理”,然后跳转到我的测试控制器的测试方法并返回 500。
-
您将
UseExceptionHandler调用放在UseRouting和UseEndpoints之前或之后的位置? -
在 app.UseRouting() 之后
-
请先尝试注册。这些可能是
Configure中的第一个方法调用。
标签: c# error-handling asp.net5