Веб-API Asp.net: на контроллере не найдено никаких действий

Так что это действительно вызывает у меня головную боль.

Маршрут:

            config.routes.MapHttpRoute(
            name: 'ControllerAction' ,
            routeTemplate: "api/{controller}/{action}"
        );

Контроллер:

public class LookupsController : ApiControllerBase
{
    [ActionName("all")]
    public Lookups GetLookups()
    {
        var lookups = new Lookups
        {
            Customers = GetCustomers().ToList(),
            //add more
        };
        return lookups;
    }

}

но всякий раз, когда я пытаюсь нажать uri: /api/lookups/all, я получаю сообщение об ошибке 404:

«В контроллере «Поиски» не найдено действие, соответствующее имени «все».

Любая помощь будет оценена

РЕДАКТИРОВАТЬ: Итак, я понял это, наконец. это было из-за неправильной зависимости. VS2012 автоматически разрешил действие в атрибуте system.web.mvc.actionname, тогда как мне был нужен атрибут system.web.http.actionname.

странная проблема, в любом случае, я надеюсь, что это поможет кому-то еще.


person jakli    schedule 30.04.2013    source источник
comment
@jakli, мне это помогло :) Большое спасибо.   -  person Chandermani    schedule 25.09.2013


Ответы (1)


Джейкоб Ли,

РЕДАКТИРОВАТЬ:

Вы переименовываете контроллер, но не указываете метод. WebApi разрешает метод из префикса GET, PUT, DELETE, POST. Таким образом, атрибут метода должен быть помещен в сигнатуру действия:

Попробуйте это, у меня хорошо работает:

public class LookupsController : ApiControllerBase
{
    [HttpGet()]
    [ActionName("All")]
    public Lookups GetLookups()
    {
        var lookups = new Lookups
        {
            Customers = GetCustomers().ToList(),
            //add more
        };
        return lookups;
    }

}

routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }

);

Посмотрите здесь для получения дополнительной информации о маршрутизации:

Маршрутизация в ASP Веб-API .NET

Надеюсь, это поможет вам!

person Fals    schedule 30.04.2013
comment
поэтому я попробовал это таким образом и продолжал получать, что httpget не содержит конструктора, который принимает 1 аргумент. Но спасибо за подсказку - person jakli; 30.04.2013
comment
Привет, @jakli, похоже, ты используешь более старую версию, чем моя! Я изменил пост на другой подход, посмотрите и скажите, работает ли он для вас! Он отлично работает для меня здесь! :) - person Fals; 30.04.2013