asp.net-core - 从自定义的错误请求响应内部记录
问题描述
我正在使用下面的代码捕获模型验证错误,并从 CustomProblemDetails 对象输出自定义 400 响应,效果很好。我的问题是,我想从 CustomProblemDetails 对象中登录,但看不到如何使用 DI。我已经通过了上下文,这使我可以访问服务,但这是要走的路吗?如果是这样,我只能访问 ILoggerFactory 如何使用 ILoggerFactory 登录?
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.ConfigureApiBehaviorOptions(options =>
{
options.InvalidModelStateResponseFactory = context =>
{
var problemDetails = new CustomProblemDetails(context)
{
Type = "https://contoso.com/probs/modelvalidation",
Title = "One or more model validation errors occurred.",
Status = StatusCodes.Status400BadRequest,
Detail = "See the errors property for details.",
Instance = context.HttpContext.Request.Path
};
return new BadRequestObjectResult(problemDetails)
{
ContentTypes = { "application/problem+json" }
};
};
});
解决方案
对于登录InvalidModelStateResponseFactory
,您可以尝试以下代码:
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).ConfigureApiBehaviorOptions(options =>
{
options.InvalidModelStateResponseFactory = context =>
{
var loggerFactory = context.HttpContext.RequestServices.GetRequiredService<ILoggerFactory>();
var logger = loggerFactory.CreateLogger("Logger From Invalid Model");
var problemDetails = new CustomProblemDetails(context)
{
Type = "https://contoso.com/probs/modelvalidation",
Title = "One or more model validation errors occurred.",
Status = StatusCodes.Status400BadRequest,
Detail = "See the errors property for details.",
Instance = context.HttpContext.Request.Path
};
logger.LogError(JsonConvert.SerializeObject(problemDetails));
return new BadRequestObjectResult(problemDetails)
{
ContentTypes = { "application/problem+json" }
};
};
});
推荐阅读
- scala - 使用sttp将响应保存为scala中的文件
- c++ - 为什么插入 std::unordered_set 调用复制构造函数?
- c# - JsonIgnore 属性在抽象类中不起作用
- botframework - Bot Framework .dialog 文件和 CodeAction
- web-scraping - page.close() 不会停止 ui4j 活动和网页的定期重新加载
- javascript - JS:如何管理 POST 请求队列
- npm - 猜猜是不是digitalocean中的npm冲突和pm2状态错误
- django - 为什么它 urlpatterns 给我页面错误?
- python - MultiIndex 数据帧的列差异
- c++ - 不一致的操作数约束