ASP. NET Core: добавить пользовательский аргумент в метод, используя фильтр действий. - PullRequest
0 голосов
/ 28 марта 2020

Я хочу добавить настраиваемый аргумент в метод с использованием фильтра настраиваемых действий.

Что я пытался

Я создал фильтр действий, который вводит аргумент с помощью context.ActionArguments. После этого изменения вызов GET с использованием этого фильтра действий возвращает 415 неподдерживаемый тип носителя, если я не указываю Context-Type как приложение / json.

Фильтр действий

    public class AddArgumentActionFilterAttribute : ActionFilterAttribute
    {
        public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            string itemId = context.RouteData.Values["itemId"] as string;
            MyClass item = await db.GetItemAsync(itemId); // Some call to the database
            context.ActionArguments["item"] = item;
            await next();
        }
    }

Метод контроллера

        [HttpGet]
        [Route("items/{itemId}")]
        [AddArgumentActionFilter]
        public async Task<ActionResult<RoomWebEntity>> GetItem(MyClass item)
        {
            // do stuff
        }

Отправка запроса GET на items/{itemId} возвращает 415 неподдерживаемых типов носителей. Если я укажу Content-Type как application / json в заголовке, то вызов будет успешным.

Похоже, была проведена некоторая проверка, когда аргумент действия является объектом. Есть ли способ добавить аргумент изнутри, не меняя поведение HTTP-вызова?

Вывод dotnet --info

.NET Core SDK (reflecting any global.json):
 Version:   3.1.200-preview-014883
 Commit:    4e2a0ee959

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.18363
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.1.200-preview-014883\
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...