Here are my routes in Global.asax
routes.MapRoute("PizzaGet", "pizza/{pizzaKey}", new { controller = "Pizza", action = "GetPizzaById" });
routes.MapRoute("DeletePizza", "pizza/{pizzaKey}", new { controller = "Pizza", action = "DeletePizza" });
Here are the my controller methods
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetPizzaById(long pizzaKey)
[AcceptVerbs(HttpVerbs.Delete)]
public ActionResult DeletePizza(long pizzaKey)
When I do a GET it returns the object, but when I do a DELETE I get a 404. It seems like this should work, but it doesn't.
If I switch the two routes around then I can do the DELETE, but get a 404 on the GET.
Now this is truly beautiful. Thanks
routes.MapRoute("Pizza-GET","pizza/{pizzaKey}",
new { controller = "Pizza", action = "GetPizza"},
new { httpMethod = new HttpMethodConstraint(new string[]{"GET"})});
routes.MapRoute("Pizza-UPDATE", "pizza/{pizzaKey}",
new { controller = "Pizza", action = "UpdatePizza" },
new { httpMethod = new HttpMethodConstraint(new string[] { "PUT" }) });
routes.MapRoute("Pizza-DELETE", "pizza/{pizzaKey}",
new { controller = "Pizza", action = "DeletePizza" },
new { httpMethod = new HttpMethodConstraint(new string[] { "DELETE" }) });
routes.MapRoute("Pizza-ADD", "pizza/",
new { controller = "Pizza", action = "AddPizza" },
new { httpMethod = new HttpMethodConstraint(new string[] { "POST" }) });
You can constrain your routes by HTTP verb like this:
string[] allowedMethods = { "GET", "POST" };
var methodConstraints = new HttpMethodConstraint(allowedMethods);
Route reportRoute = new Route("pizza/{pizzaKey}", new MvcRouteHandler());
reportRoute.Constraints = new RouteValueDictionary { { "httpMethod", methodConstraints } };
routes.Add(reportRoute);
Now you can have both routes, and they will be constrained by the verbs.