REST был таким популярным модным словом последние пару лет (или около того), и когда появился ASP.NET MVC, все связали REST с ASP. NET MVC. Я также попал на ажиотаж, и из-за недостатка моих знаний мое понимание REST было просто:
Но это намного больше. И чем больше я узнаю о REST, тем меньше я связываю с ним ASP.NET MVC. Конечно, это намного ближе к REST, чем к WebForms. Так что на самом деле правда как раз наоборот:
И если ваш маршрут по умолчанию определен как controller / action / id
, то определенно не RESTful.
Позвольте мне объяснить мою проблему с этим пониманием.
Если бы ASP.NET MVC был RESTful, у нас не было бы маршрута по умолчанию, определенного как:
controller/action/id
, а скорее
resources/id /* that would have to use HTTP methods GET/PUT/POST/DELETE */
Поэтому вместо (также предоставляя метод HTTP с путем запроса):
/product/index/1 /* GET */
/product/create /* POST */
/product/delete/1 /* POST */
/product/update/1 /* POST */
он должен быть (здесь также указан метод HTTP)
/products/1 /* GET */
/products /* POST */
/products/1 /* DELETE */
/products/1 /* PUT */
Теперь это будет RESTful. Хорошо, что это действительно возможно. И если вы сделаете его полностью RESTful, это также будет означать, что вам придется использовать Ajax , потому что методы PUT и DELETE не могут выполняться с запросами только браузера (это не совсем так 1 ). Таким образом, современные приложения Ajax могут быть полностью RESTful.
Ajax - это клиентская технология, которая на самом деле не имеет ничего общего с ASP.NET MVC. Дело в том, что ASP.NET MVC можно реализовать как полностью RESTful-приложение. Способы его достижения (Ajax) не важны. (спасибо Дарину Димитрову)
Почему мы рассматриваем ASP.NET MVC в качестве RESTful-фреймворка, особенно связывая с ним маршрутизацию URL-адресов? Почему они не определили маршрут URL-адресов по умолчанию на ] обеспечить RESTfulness? Я ищу не аргументированные ответы, а те, которые действительно отвечают на вопрос - как возникли эти отношения ... Может быть, я все еще недостаточно умен и все еще воспринимаю это как недостаток моих знаний о том и другом.
На самом деле вам не нужно использовать Ajax для полной реализации архитектуры RESTful. Asp. net MVC поддерживает (начиная с версии 2) переопределение метода HTTP, что означает, что вы можете использовать методы PUT или DELETE, используя формы браузера. Все, что вам нужно сделать, это добавить дополнительное скрытое поле, например:
<input type="hidden" name="X-HTTP-Method-Override" value="DELETE" />
Asp.net MVC framework сможет понимать такой запрос POST как запрос DELETE, а селектор метода действия HttpDeleteAttribute
также распознает его как удалить запрос. Метод HTTP, переопределяющий FTW!