Возвращает из OnActionExecutionAsync без выполнения действия в ядре asp.net
Здесь я хочу вернуться из custom action filter
без выполнения controller
action
method
в asp.net core
WEB API
,
Ниже мое требование с образцом code
,
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
bool valid=SomeMethod();
if(valid)
//executes controller action
else
//returns without executing controller action with the custom message (if possible)
}
Я искал и нашел несколько связанных вопросов и ответов, но у меня ничего не получалось.
Нашел это await base.OnActionExecutionAsync(context, next);
но пропускает оставшуюся логику filters
и непосредственно выполняет controller action
так что не работает для моего сценария.
2 ответа
Решение
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
bool valid=SomeMethod();
if(valid)
next();
else
context.Result = new BadRequestObjectResult("Invalid!");
}
Вы можете замкнуть накоротко, установив context.Result к любой действительной реализации IActionResult
, Приведенный ниже пример просто возвращает ошибку в виде простого текста. Если вам нужно какое-то необычное сообщение об ошибке, вы можете использовать View()
вместо.
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
bool valid=SomeMethod();
if(valid)
next();
else
context.Result = Content("Failed to validate")
}