Я хочу добавить настраиваемый аргумент в метод с использованием фильтра настраиваемых действий.
Что я пытался
Я создал фильтр действий, который вводит аргумент с помощью 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\