2012-05-02 3 views
0

В моем ASP.NET проекта Web API, я следующие маршрутизации определены в Global.asax:asp.net MVC - не может понять, почему маршрутизация не работает

routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "{controller}/{action}" 
      ); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}" 
      ); 

У меня есть контроллер, называемый UserFeedController с действием с следующая подпись:

public UserFeedResponseViewModel GetUserFeed(int id) 

Когда я ввожу URL http://api.mydomain.com/UserFeed/GetUserFeed/4 я получаю 404. Почему второе правила маршрутизации не применяется?

MVC routing совершенно не в моих силах, чтобы понять.

ответ

2

Ваши два маршрута в основном одинаковы. MVC находит первый маршрут, который соответствует, и поскольку вы указали контроллер и какое-либо действие, он считает, что вам хорошо идти. Он будет игнорировать указанный вами идентификатор (я считаю, что он попытается передать его в качестве параметра).

Я хотел бы предложить изменить свой первый маршрут включить API/в начале, так как:

routes.MapHttpRoute( 
      name: "DefaultApi", 
      routeTemplate: "API/{controller}/{action}" 
     ); 

     routes.MapHttpRoute( 
      name: "Default", 
      url: "{controller}/{action}/{id}" 
     ); 

Это гарантирует, что ваши маршруты работают должным образом.

+0

Боже мой! До сих пор я не заметил, что код вызывает два отдельных метода: «MapRoute()» и «MapHttpRoute()». Почему на маршрутизаторах веб-API по-разному выполняется маршрутизация? Я изменил код, чтобы всегда использовать «MapHttpRoute()», и теперь я получаю поведение, которое я ожидаю ... – David

Смежные вопросы