Как получить аргумент действия FromServices или FromBody или другой - PullRequest
0 голосов
/ 07 июля 2019

У меня есть фильтр пользовательских действий для проверки параметров действия перед выполнением действия

public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
    if (context.ModelState.IsValid == false)
        throw new Exception("");
    if (context.ActionArguments.Values.Any() && context.ActionArguments.Values.All(v => v.IsAllPropertiesNull()))
        throw new Exception("");

    await next();
}

как я могу проверить, context.ActionArguments.Value это [FromBody] или [FromServices] или [FromRoute] и т. Д ...

1 Ответ

2 голосов
/ 08 июля 2019

Вы получаете источник привязки от BindingInfo каждого параметра. Вы получаете это от context.ActionDescriptor.Parameters. Вот пример.

public class CustomActionFilter: IAsyncActionFilter
{
    /// <inheritdoc />
    public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        foreach (var parameterDescriptor in context.ActionDescriptor.Parameters)
        {
            var bindingSource = parameterDescriptor.BindingInfo.BindingSource;

            if (bindingSource == BindingSource.Body)
            {
                // bound from body
            }
            else if (bindingSource == BindingSource.Services)
            {
                // from services
            }
            else if (bindingSource == BindingSource.Query)
            {
                // from query string
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...