#error-handling #asp.net-core-webapi #asp.net-mvc-routing
#обработка ошибок #asp.net-core-webapi #asp.net-mvc-routing
Вопрос:
Я запускаю проект .NET Core 3.1 Web API, и ниже приведен мой конвейер. Проблема, с которой я сталкиваюсь, заключается в том, что при возникновении ошибки я хочу, чтобы был поврежден контроллер ошибок и ошибка была зарегистрирована. Однако возвращается HTML-код из резервного контроллера. Можете ли вы помочь мне исправить эту проблему с маршрутизацией?
app.UseExceptionHandler("/error");
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "KYCDB API"));
app.UseRouting();
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapFallbackToController("Index", "Fallback");
});
app.UseHealthChecks("/api/monitor");
это мой контроллер ошибок
[ApiController]
public class ErrorController : ControllerBase
{
private readonly ILogger<ErrorController> logger;
public ErrorController(ILogger<ErrorController> logger) => this.logger = logger;
[Route("/error")]
[NonAction]
public IActionResult Error()
{
var exception = HttpContext.Features.Get<IExceptionHandlerFeature>();
logger.LogError(exception.Error.Message, exception);
return Problem(detail: exception.Error.Message);
}
}
и запасной контроллер
public class FallbackController : Controller
{
public ActionResult Index() => PhysicalFile(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "index.html"), "text/HTML");
}
Комментарии:
1.
The problem I face is that when an error occurs, I want the error controller to be hit and the error to be logged. However, what is returned is the html from the fallback controller.
Какой тип ошибки? ошибка 404 или ошибка 500? Пожалуйста, уточните больше о проблеме, чтобы мы могли лучше понять и помочь устранить проблему.2. Необработанные 500 ошибок — это те, которые я хочу зарегистрировать. Я действительно выполнил эту работу, поиграв с атрибутами ErrorController. После того, как я удалил атрибут NonAction, он начал функционировать как обычный контроллер. Недостатком является то, что теперь он также отображается в документации Swagger, что не идеально.