#c# #asp.net #error-handling #middleware
Вопрос:
У меня проблема с моим простым промежуточным программным обеспечением для обработки ошибок приложений… Когда я подделал строку подключения sql, я получаю ошибку, но мое промежуточное программное обеспечение не улавливает ее… кто-нибудь знает, почему?
{
public class ErrorHandlingMiddleware : IMiddleware // we need to add it to tell ASP that this class is middleware
{
public ErrorHandlingMiddleware()
{
}
//next - access to next middleware
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
try
{
await next.Invoke(context); // here we call next middleware?
}
catch(Exception e)
{
context.Response.StatusCode = 500;
await context.Response.WriteAsync("Something went wrong");
}
}
}
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,StudentSeeder seeder)
{
seeder.Seed();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyLibrus v1"));
}
//start of request
app.UseMiddleware<ErrorHandlingMiddleware>();
app.UseAuthentication();
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<ErrorHandlingMiddleware>();
...
кто — нибудь может сказать мне, почему это не работает? У меня нет ошибки в моей развязности, но в сравнении..
Комментарии:
1. Ваше промежуточное программное обеспечение для обработки ошибок должно быть первым в конвейере, чтобы гарантировать, что все ошибки будут обнаружены, поэтому переместите его в начало функции настройки. Во-вторых, если вы работаете в режиме отладки, то, возможно, страница исключений разработчика улавливает это.
2. @ekke Ты знаешь, как это исправить?