У меня есть простой контроллер api ядра aspnet, когда действие get, но это действие не может получить свои аргументы из пути запроса. Есть ли что-нибудь, что я неправильно использую для маршрутизации webapi?
действие:
[HttpGet]
[AllowAnonymous]
public string Test(string arg) // arg is always null no matter what path I use
{
return arg;
}
маршруты:
routes.MapAreaRoute(
name: "ad",
areaName: "Ad",
template: "api/{area:exists}/{controller}/{action}/{id}",
defaults: new { controller = "Ad" }
);
routes.MapRoute(
name: "default",
template: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
журналы:
> информация: Microsoft.AspNetCore.Hosting.Internal.WebHost [1] Запрос запуска HTTP / 1.1 GET http://localhost/api/Ad/Ad/Test/asdfasdf dbug: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler [9] AuthenticationScheme: носитель не был аутентифицирован. dbug: Microsoft.AspNetCore.Routing.RouteConstraintMatcher [1] Значение маршрута 'Ad' с ключом 'area' не соответствует ограничению 'Microsoft.AspNetCore.Routing.Constraints.CompositeRouteConstraint'. dbug: Microsoft.AspNetCore.Routing.RouteConstraintMatcher [1] Значение маршрута 'Ad' с ключом 'area' не соответствует ограничению 'Microsoft.AspNetCore.Routing.Constraints.CompositeRouteConstraint'. dbug: Microsoft.AspNetCore.Routing.RouteBase [1] Запрос успешно сопоставил маршрут с именем 'ad' и шаблоном 'api / {area: exists} / {controller} / {action} / {id}'. dbug: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [1] Выполнение действия Api.Areas.Ad.Controllers.AdController.Test (Api) Информация: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [1] Метод выполнения Api.Action .Ad.Controllers.AdController.Test (Api) с аргументами () - ModelState является допустимым dbug: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [2] Метод выполненного действия Api.Areas.Ad.Controllers.AdController.Test (Api) , вернул результат Microsoft.AspNetCore.Mvc.ObjectResult. dbug: Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor [4] По запросу для согласования содержимого информации не найдено. dbug: Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor [2] Выбранный модуль форматирования вывода «Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter» и тип содержимого »для записи ответа. info: Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor [1] Выполнение ObjectResult, запись значения Microsoft.AspNetCore.Mvc.ControllerContext. info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [2] Выполненное действие Api.Areas.Ad.Controllers.AdController.Test (Api) в 193.6691ms dbug: Microsoft.AspNetCore.Server.Kestrel [9] Идентификатор подключения "0HL9N6GCMP завершен ответ на сохранение активности. информация: Microsoft.AspNetCore.Hosting.Internal.WebHost [2] Запрос завершен через 218,2123 мс 204
"api/{area:exists}/{controller}/{action}/{id}"
предлагаетсяarea:exists
бытьad
. Похоже, вы отправили запрос наapi/Ad/Ad/Test/asdfasdf
- person Arno   schedule 29.11.2017ad
, та же проблема, аргумент равен нулю. Также я читал, что сопоставление маршрутов нечувствительно к регистру, поэтому это не должно быть проблемой. - person fluter   schedule 29.11.2017\{ID}
на\{args}
, который не совсем уверен в этом - person Arno   schedule 29.11.2017No actions matched the current request. Route values: area=Ad, controller=Ad, action=Test, id=asdfasdf
и возникает ошибка 404. - person fluter   schedule 29.11.2017