Разница между ними заключается в следующем: давайте предположим, что рассматриваемый метод 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.