2013-12-13 3 views
1

Поэтому у меня есть 2 контроллера:Как установить действие по умолчанию для контроллера?

[AllowCrossSiteJson] 
public class ItemController : ApiController { 
    [HttpGet] 
    public LinkedList<Object> FindItem([FromUri]ItemQuery query) { 
     .... 
    } 
} 

И

[AllowCrossSiteJson] 
public class SubDepController : ApiController 
{ 

    [HttpGet] 
    public LinkedList<Object> FindSubDep(string ID) { 
     .... 
    } 
} 

Вот вещь, я стараюсь называть как:

http://localhost:43751/api/SubDep 

http://localhost:43751/api/Item 

И Позиционный регулятор работает, но SubDep делает не работа! Почему это?

Вот мой WebApiConfig:

public static void Register(HttpConfiguration config) { 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
     config.Routes.MapHttpRoute(
      name: "withAction", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 

Я получаю ошибку назад это:

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:43751/api/SubDep'.","MessageDetail":"No action was found on the controller 'SubDep' that matches the request."} 

БОНУС вопрос:

Как ASP.NET MVC знаю, что я попытаться получить:

http://localhost:43751/api/Item 

Он автоматически переходит на действие FindItem? Это как чистый МАГИЯ для меня !!

ответ

1

При попытке вызвать FindSubDep действия, строка запроса должна быть как belwo:

http://localhost:43751/api/SubDep/1 
+0

Вы абсолютно правы, это причина. Я сделал параметр необязательным, и он вызывает функцию правильно. – Bill

1

Для бонусного вопроса. Он получает правильное действие из-за HTTP GET глагола [] в вашем случае, когда вы делаете запрос GET для

http://localhost:43751/api/Item 

будет найти действие с атрибутом [HttpGet] на контроллере товара.

+0

Очень круто! Никогда не думал об этом. – Bill

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