У меня интересная ситуация, которая поставила меня в тупик.
Кажется, что публикация appliction/json
типа контента делает базовый механизм маршрутизации неспособным связывать аргументы метода действия.
Использование маршрута по умолчанию:
Routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
У меня есть метод действия, который выглядит следующим образом:
//Controller name: TestController
[HttpPost]
public ActionResult SaveItem(int id, JsonDto dto)
{
// if content type of the request is application/json id = 0, JsonDto is populated
// if content type of the request is application/x-www-form-urlencode id = 1
}
Я публикую на этот URL /Test/SaveItem/1
+ объект json.
Причина, по которой мне нужно id
и JsonDto
, заключается в том, что аргумент id
ссылается на родительский объект, к которому должен * JsonDto
обратиться объект.
Полагаю, я мог бы изменить dto, чтобы он содержал родительский id в качестве свойства, и обойти всю эту проблему.
Мне кажется странным, что аргумент id
не заполняется, когда я отправляю запрос application/json
.