2016-01-07 3 views
0

Я пытаюсь создать контроллер WebAPI с несколькими командами Get с помощью метода ActionName. Я успешно сделал это в другом проекте, но у меня возникли проблемы с этим последним проектом, и я не могу понять, почему мой азартный вызов модели нокаута не может найти конкретный URI.ASP.Net WebAPI ActionName Route Not Found

WebApiConfig.cs:

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

Контроллер:

// GET api/lot 
    [ActionName("Default")] 
    public IEnumerable<DataObject> Get() 
    { 
     //... 
    } 

    // GET api/lot/Specific/5 
    [ActionName("Specific")] 
    public IEnumerable<DataObject> Get(int? data) 
    { 
     //... 
    } 

    // GET api/lot/5 
    public string Get(int id) 
    { 
     return "value"; 
    } 

Мои действия по умолчанию для ГЭТ работает идеально, но Специфическое действие продолжает иметь эту ошибку, когда я пытаюсь вызвать его из Вид- модель:

Не удалось загрузить ресурс: сервер ответил статусом 404 (не найдено) «

я добавил [HttpGet] рядом с [ActionName ("Specific")] и имел следующую ошибку:

"ПОЛУЧИТЬ http://localhost:57492/api/lot/Specific/1 404 (Не найдено)"

Я пытался несколько различных вещей, таких как удаление int? data, но затем, когда я пытаюсь построить проект, он говорит мне, что существующая функция с теми же аргументами уже существует, даже с разными именами действий.

В конечном счете, я хотел бы иметь несколько действий Get (parameter), чтобы вызвать взаимодействие с моей моделью просмотра.

ответ

1

я был в состоянии решить эту проблему, добавив свойство Route с HttpGet и переименование всех моих функций уникальные имена, как GETALL(), GetSpecific (ИНД ид), и т.д ..

// GET api/lot 
    [HttpGet] 
    [Route("api/lot/GetAll")] 
    public IEnumerable<DataObject> GetAll() 
    {...} 

    // GET api/lot/GetSpecific/{id} 
    [HttpGet] 
    [Route("api/lot/GetSpecific/{id}")] 
    public IEnumerable<DataObject> GetSpecific(string id) 
    { 
0

Добавление нового маршрут в config.Routes, как показано ниже. Это поможет? Я не проверял это.

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/specific/{data}", 
      defaults: new { 
       action = "Specific", 
       data = RouteParameter.Optional } 
     );