Tenho uma API Web ASP.NET Core 6. Ela é pública.
Se você acessar a URL raiz no navegador, será exibido um erro http 404.
O ELMAH detecta isso e envia um e-mail, mas tenho uma filtragem de erros e ele não vê a exceção (o que acontece milhares de vezes por dia enquanto a API é escaneada).
Em startup.cs
, configurei isso:
public void ConfigureServices( IServiceCollection services )
{
services.AddMvc(options => options.Filters.Add(typeof(ExceptionFilter)));
// ...
}
No Configure
método, eu chamo isso de:
if (GetUseErrorEmailVar())
{
app.UseExceptionHandler(appException =>
{
appException.Run(async context =>
{
var exceptionFeature = context.Features.Get<IExceptionHandlerFeature>();
if ( exceptionFeature?.Error is FileNotFoundException )
{
await context.Response.WriteAsync(" The file was not found.");
}
if (exceptionFeature?.Path == "/")
{
await context.Response.WriteAsync(" Page: Home.");
}
if (exceptionFeature.Error is ApiErrorException exception)
{
await context.Response.WriteAsync(JsonConvert.SerializeObject(new BaseReturnDataObject
{
ErrorType = exception.GetType().ToString(),
ErrorMsg = exception.Message
}
)
);
}
////else if (exceptionFeature.Error is ApiLoginErrorException exception2)
////{
//// // Debug instead of error, because SMTP appender makes a duplicate email (actually 3) - EWB
//// log.LogDebug("Startup::Configure(...):: Global exception handler ; LOGIN ex:" + exceptionFeature.Error.ToStringNullSafe());
////}
////else// everything else -EWB
////{
//// // Debug instead of error, because SMTP appender makes a duplicate email (actually 3) - EWB
//// log.LogDebug("Startup::Configure(...):: Global exception handler ; ERROR ex:"+ exceptionFeature.Error.ToStringNullSafe());
////
//// exceptionFeature.Error.Data["handled"] = true;
////}
});
});
}
app.UseElmah();// must be after all other handlers and middleware for errors. -EWB
Mas nem o manipulador de exceções lambda, nem meu manipulador de exceções explícito são chamados, então posso decidir se devo ou não suprimir a mensagem quando for um 404... vai direto para o elmah.
Já vi alguns exemplos de soluções alternativas para isso, mas todos têm padrões de configuração e arquivos que não estou usando. Tipo, coisas das quais nunca ouvi falar... Presumo que sejam de versões posteriores da Web API. Estou usando o .NET 6.
404 não é uma exceção, não será detectado pelo middleware do manipulador de erros
você poderia escrever um middleware como abaixo: