У меня есть следующие маршруты: MyHttpMethodConstraint - это тот, который проверяет метод HTTP, переопределяя форму переменной.ASP.NET MVC Создание URL-адресов для ссылок, выбирающих неправильный маршрут с ограничениями метода HTTP
routes.MapRoute("Retrieve", "{controller}/{id}/{action}", new { action = "retrieve" }, new { action = "create|retrieve|update|delete", httpMethod = new MyHttpMethodConstraint("GET", "HEAD"), id = new GuidRouteConstraint() });
routes.MapRoute("Update", "{controller}/{id}", new { action = "update" }, new { action = "update", httpMethod = new MyHttpMethodConstraint("PUT"), id = new GuidRouteConstraint() });
routes.MapRoute("Delete", "{controller}/{id}", new { action = "destroy" }, new { action = "delete", httpMethod = new MyHttpMethodConstraint("DELETE"), id = new GuidRouteConstraint() });
routes.MapRoute("Create", "{controller}", new { action = "create" }, new { action = "create", httpMethod = new MyHttpMethodConstraint("POST") });
Everthing направляется правильно входящими в действия, однако поколения URL-за Url.ActionLink не работает, как я надеялся (с использованием маршрутов, которые ограничены в HTTP GET методы), но вместо того, чтобы найти те, которые ограничены в POST/PUT/DELETE и, следовательно, неправильные URL-адреса. Я попробовал переупорядочить маршруты, но это не помогает. Я ожидаю, что это URL-генерация игнорирует ограничения.
Есть ли обходной путь, кроме создания моего собственного метода ActionLink?
EDIT
Существует также маршрут по умолчанию в нижней части списка:
routes.MapRoute("Default", "{controller}/{action}", new { controller = "home", action = "index" });
Можете ли вы предоставить код для MyHttpMethodConstraint? Что делает это из-за недостатка HttpMethodConstraint? – danludwig
См. Мой комментарий к вашему ответу - стандартный HttpMethodConstraint не обрабатывает X-HTTP-метод-переопределение –