Возвращает из OnActionExecutionAsync без выполнения действия в ядре asp.net

Здесь я хочу вернуться из custom action filter без выполнения controlleractionmethod в asp.net coreWEB 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")
    }
Другие вопросы по тегам