У меня есть сайт ASP.net MVC 3 с такими маршрутами:
routes.MapRoute("Get", "endpoint/{id}",
new { Controller = "Foo", action = "GetFoo" },
new { httpMethod = new HttpMethodConstraint("GET") });
routes.MapRoute("Post", "endpoint/{id}",
new { Controller = "Foo", action = "NewFoo" },
new { httpMethod = new HttpMethodConstraint("POST") });
routes.MapRoute("BadFoo", "endpoint/{id}",
new { Controller = "Error", action = "MethodNotAllowed" });
routes.MapRoute("NotFound", "",
new { controller = "Error", action = "NotFound" });
Итак, в двух словах, у меня есть Маршрут, который совпадает на некоторых HTTP-глаголах, таких как GET и POST, но на других HTTP-глаголах, таких как PUT и DELETE, он должен возвращать конкретную ошибку.
Мой маршрут по умолчанию - 404.
Если я удаляю маршрут "BadFoo", то PUT против конечной точки / {id} возвращает 404, потому что ни один из других маршрутов не совпадает, поэтому он идет к моему маршруту NotFound.
Дело в том, что у меня есть тонна маршрутов, таких как Get и Post, где у меня есть HttpMethodConstraint и где мне нужно будет создать маршрут, такой как маршрут BadFoo, просто чтобы поймать правильное совпадение в строке маршрута, но не в методе. , который взрывает мой маршрут без необходимости.
Как настроить маршрутизацию только с маршрутами Get, Post и NotFound, при этом различая HTTP 404 не найден (= недействительный URL) и HTTP 405 Метод недопустим (= действительный URL, неправильный HTTP метод)?