Мне нравится функция Автоматические ответы HTTP 400 , новая для ASP.NET Core 2.1, и она работает очень хорошо в большинстве случаев.
Однако, в одном действии мне нужно выполнитьнемного предварительной обработки перед проверкой полезной нагрузки.У меня есть собственный валидатор, которому для проверки требуется два значения в модели.Одно из этих значений находится в пути, поэтому я хотел бы установить это значение для модели из пути, а затем проверить.
Я не хочу отключать функциональность для всех действий с помощью:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
}
Можно ли как-нибудь отключить его только для отдельного действия?
Редактировать:
Я пытался изменить InvalidModelStateResponseFactory, но это не удалосьрешить мою проблему, потому что мне все еще нужно войти в действие контроллера:
services.Configure<ApiBehaviorOptions>(options =>
{
options.InvalidModelStateResponseFactory = actionContext =>
{
var ignore = actionContext.ActionDescriptor.FilterDescriptors.Any(fd => fd.Filter is SuppressModelStateInvalidFilterAttribute);
if (ignore)
{
// Can only return IActionResult so doesn't enter the controller action.
}
return new BadRequestObjectResult(actionContext.ModelState);
};
});
[AttributeUsage(AttributeTargets.Method)]
public class SuppressModelStateInvalidFilterAttribute : FormatFilterAttribute
{
}
Редактировать:
Вот ссылка на проблему, которую я поднял на asp.netБазовое репо на случай, если я с этим доберусь - https://github.com/aspnet/Mvc/issues/8575