Ведение журнала из настраиваемого ответа на неверный запрос - PullRequest
0 голосов
/ 24 мая 2019

Я фиксирую ошибки проверки модели, используя приведенный ниже код, и выводю пользовательский ответ 400 из объекта CustomProblemDetails, который прекрасно работает.У меня вопрос, я хочу войти изнутри объекта 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" }
            };
        };
    });

1 Ответ

0 голосов
/ 27 мая 2019

Для входа в систему 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" }
        };
    };
});
...