Ответ 1
Разница между двумя заключается в следующем: пусть предполагается, что рассматриваемый метод Create
находится на HomeController
.
Использование атрибута AcceptVerbs
не влияет на маршрутизацию. Это на самом деле то, что используется вызывающим действием. То, что это позволяет сделать, это иметь 2 метода действий на контроллере с тем же именем, каждый из которых отвечает на другой HTTP-метод.
public ActionResult Create(int id) { .. }
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formCollection) { .. }
Итак, когда приходит запрос на /home/create
, маршрут будет соответствовать и отсылает запрос диспетчеру-контроллеру. Затем вызывающий вызывает правильный метод, рассматривая атрибут AcceptVerbs
.
Использование HttpMethodConstraint
в маршрутизации сделает его таким, чтобы сам маршрут не соответствовал запросу. Поэтому, когда запрос POST приходит для /home/create
, ни один из методов действия не будет вызван, потому что этот маршрут не будет соответствовать запросу. Возможно, что другой маршрут будет соответствовать этому запросу.
Часть причин перекрытия здесь заключается в том, что маршрутизация является функцией ASP.NET 3.5 SP1 и не является специфичной для MVC. MVC использует маршрутизацию, но маршрутизация также используется динамическими данными, и мы планируем интегрировать маршрутизацию с веб-формами ASP.NET.