✅ Using services.PostConfigure<ApiBehaviorOptions> to log Model Validation errors in dotnet6?
Is this a safe implementation to log Model Validation errors in dotnet6?
public static IServiceCollection AddModelBindingErrorLogging(this IServiceCollection services)
{
services.PostConfigure<ApiBehaviorOptions>(options =>
{
var builtInFactory = options.InvalidModelStateResponseFactory;
options.InvalidModelStateResponseFactory = context =>
{
try //dont crash the entire app if we cant run this routine
{
var loggerFactory = context.HttpContext.RequestServices.GetRequiredService<ILoggerFactory>();
var descriptor = context.ActionDescriptor as ControllerActionDescriptor;
var actionName = descriptor.ActionName;
var controllerName = descriptor.ControllerName;
var logger = loggerFactory.CreateLogger("ModelBindingExceptionLogger");
string methodName = $"{controllerName}Controller-{actionName}";
try
{
logger.LogError($"ModelValidation Errors invoking {methodName}. Details: {JsonConvert.SerializeObject(context.ModelState.Errors())}");
}
catch (Exception ex)
{
logger.LogError(ex, $"Unable to get ModelValidation Errors - {methodName}");
}
}
catch { }
return builtInFactory(context);
};
});
return services;
}public static IServiceCollection AddModelBindingErrorLogging(this IServiceCollection services)
{
services.PostConfigure<ApiBehaviorOptions>(options =>
{
var builtInFactory = options.InvalidModelStateResponseFactory;
options.InvalidModelStateResponseFactory = context =>
{
try //dont crash the entire app if we cant run this routine
{
var loggerFactory = context.HttpContext.RequestServices.GetRequiredService<ILoggerFactory>();
var descriptor = context.ActionDescriptor as ControllerActionDescriptor;
var actionName = descriptor.ActionName;
var controllerName = descriptor.ControllerName;
var logger = loggerFactory.CreateLogger("ModelBindingExceptionLogger");
string methodName = $"{controllerName}Controller-{actionName}";
try
{
logger.LogError($"ModelValidation Errors invoking {methodName}. Details: {JsonConvert.SerializeObject(context.ModelState.Errors())}");
}
catch (Exception ex)
{
logger.LogError(ex, $"Unable to get ModelValidation Errors - {methodName}");
}
}
catch { }
return builtInFactory(context);
};
});
return services;
}