Если это дубликат, пожалуйста, дайте мне знать, потому что я быстро просмотрел и не смог найти ничего, что действительно отвечает на мой вопрос.
Я экспериментирую с ASP.NET MVC 2. Теперь, исходя из фона веб-форм, я действительно имел дело только с HTTP GET и HTTP POST.
Я пытаюсь понять, как применить GET/PUT/POST/DELETE к соответствующим операциям CRUD в моем репозитории (Найти, Вставить, Обновить, Удалить ).
Скажем, у меня есть один контроллер со следующими методами действий:
[HttpGet] // GET: /Products/{id}
[ActionName("Products")
public ActionResult Get(int id = 0) { ... }
[HttpPut] // PUT: /Products
[ActionName("Products")
public ActionResult Put(Product product) { ... }
[HttpPost] // POST: /Products/{product}
[ActionName("Products")
public ActionResult Post(Product product) { ... }
[HttpDelete] // DELETE: /Products/{product}
[ActionName("Products")
public ActionResult Delete(Product product) { .. }
Пара вопросов по этому поводу - как бы вы назвали/разделили методы действия? Должен ли я проходить через всю модель (продукт) или только идентификатор?
Проблема, с которой я столкнулся, заключается в том, что я не уверен, как обрабатывать вызов этих методов действия с соответствующей HTTP-глаголой в моем представлении.
На этом этапе я думаю, что у меня будет 3 представления:
- «Индекс» — привязка к модели
IEnumerable<Product>
, список всех продуктов со ссылками «Редактировать», «Подробности» и «Удалить». - "Single" — привязка к одной модели
Product
, в которой перечислены все сведения о продукте с кнопкой "Обновить". - "Новый" - привязка к одной
Product
модели, с формой для создания товара, с кнопкой "Создать".
Итак, мой вопрос: как мне указать, что я хочу вызывать определенный метод контроллера с определенной HTTP-командой?
С помощью Html.BeginForm
вы можете указать перечисление FormMethod
, но оно имеет только GET и POST.
- Как я могу выполнить команду PUT и DELETE?
- Нужно ли мне отдельное представление для каждого HTTP-глагола?
- Если у меня есть ссылка под названием «Удалить», могу ли я вызвать команду HTTP DELETE для своего контроллера или ее нужно перенаправить на новый вид с помощью действия формы «Удалить»?
Или, во-первых, это глупый / излишний дизайн, я должен просто придерживаться «GET» и «POST»?
Я (довольно) новичок в этом стиле веб-разработки (REST), поэтому, пожалуйста, будьте добры. :)
ОБНОВЛЕНИЕ
Итак, я наткнулся на эта интересная статья Стивена Вальтера, посвященная именно этой теме.
Он указывает, что HTML-форма поддерживает только GET и POST (поскольку я новичок в веб-разработке в стиле REST, я даже не знал об этом, за что мне частично стыдно).
По-видимому, единственный способ вызвать действие контроллера с помощью PUT/DELETE — это сделать это с помощью AJAX. Шутки в сторону?
Итак, что мне делать здесь, следует ли мне придерживаться GET/POST или мне следует создать файл JavaScript, который обертывает базовый код XmlHttpRequest за красивой функцией?
В какую сторону склоняются разработчики ASP.NET MVC? Наверняка кто-то задавал себе этот же вопрос.