Я пытаюсь поймать ошибки маршрутизации в проекте ASP.NET Core Web API.ASP.NET Core Web API: Ловушка ошибок маршрутизации
Более конкретно, путем маршрутизации ошибки, я имею в виду, например: В контроллере у меня только:
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
Но запрос:
api/values/5/6
404 возвращается автоматически, но я хотел бы иметь возможность обрабатывать это в коде (т. е. вызывать какую-то процедуру обработки исключений).
Я попытался три различных подхода без успеха:
В ConfigureServices (IServiceCollection услуг), я добавил:
services.AddMvc(config =>
{
config.Filters.Add(typeof(CustomExceptionFilter));
});
Это фиксирует ошибки, возникающие в контроллере (например, если я ставлю бросок () в методе Get (id) выше), но не ошибки маршрутизации. Я предполагаю, что это связано с тем, что не найдено подходящего метода контроллера, поэтому ошибка распространяется на конвейер промежуточного программного обеспечения.
В попытке справиться с ошибками дальше трубопровода я попытался ...
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseExceptionHandler(
options =>
{
options.Run(
async context =>
{
var ex = context.Features.Get<IExceptionHandlerFeature>();
// handle exception here
});
});
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseMvc();
}
Я также попытался:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.Use(async (ctx, next) =>
{
try
{
await next();
}
catch (Exception ex)
{
// handle exception here
}
});
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseMvc();
}
Ни то, ни по-видимому, вызывается при возникновении ошибки маршрутизации , Я принимаю неправильный подход? Или должен ли работать один из этих подходов?
Любые предложения были бы очень оценены.
Благодаря
Chris
PS. Я относительно новичок в ASP.NET Web API, поэтому, пожалуйста, извините, где я могу использовать несколько неправильных терминов.
Спасибо, но я бы предпочел, чтобы захватить исключение, если это возможно, - это возможно? Подход здесь больше напоминает захват последствий после события, а не захват исключения при возникновении проблемы. – cbailiss
Зачем вам нужно исключение из 404 результата? –
Даже если вы хотите использовать исключение, см. Мое обновление. –