Предположим, у меня есть контроллер, который обрабатывает сценарий CRUD для «дома». Get будет выглядеть примерно так:RESTful контроллеры с различными методами Http, но те же параметры
[HttpGet]
public ActionResult Index(int? homeId)
{
Home home = homeRepo.GetHome(homeId.Value);
return Json(home, JsonRequestBehavior.AllowGet);
}
Пока все хорошо. Затем я добавляю сообщение для добавления новых.
[HttpPost]
public ActionResult Index(Home home)
{
//add the new home to the db
return Json(new { success = true });
}
Awesome. Но когда я использую ту же схему для обработки пут (обновление существующего дома) ...
[HttpPut]
public ActionResult Index(Home home)
{
//update existing home in the db
return Json(new { success = true });
}
Мы столкнулись с проблемой. Подписи метода для Post и Put идентичны, что, конечно, C# не нравится. Я мог бы попробовать несколько вещей, например добавить фиктивные параметры в подпись или изменить имена методов, чтобы напрямую отражать CRUD. Тем не менее, это хаки или нежелательны.
Что лучше всего подходит для сохранения RESTful, CRUD-контроллеров стиля здесь?
Почему вы считаете, что изменения имен мехолов хаки или нежелательны? Методы служат для разных целей, поэтому я бы сказал, что они заслуживают разных имен. –
Поскольку подход RESTful требует, чтобы все они решались на один и тот же URL-адрес, просто с различными HttpMethods (Create = Post, Read = Get, Update = Put, Delete = Delete). Есть много причин для этого, но в основном это сделает javascript api, который я построю поверх этого, намного проще писать. Меньше, тоже. – Dusda
Правильно, тогда решение Мэтта отлично работает. Сохраняет ваш внешний api RESTful, сохраняя при этом компиляцию кода на C#. –