Asp.net Web API:控制器上未找到任何操作

时间:2013-04-30 13:01:10

标签: asp.net asp.net-web-api asp.net-web-api-routing

所以这真的让我很头疼。

路线:

            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错误说:

“控制器'Lookups'上没有找到与名称'all'匹配的操作。”

任何帮助将不胜感激

编辑: 所以我终于明白了。 这是因为错误的依赖性。 VS2012将操作自动解析到system.web.mvc.actionnameattribute,而我需要的是system.web.http.actionnameattribute。

奇怪的问题,无论如何,我希望这有助于其他人。

1 个答案:

答案 0 :(得分:1)

Jakob Li,

编辑:

您正在重命名控制器但未指定方法。 WebApi从前缀GET,PUT,DELETE,POST中解析该方法。因此,method属性必须放在action的签名处:

试试这个,对我有用:

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 }

);

请点击此处了解有关路由的更多信息:

Routing in ASP.NET Web API

希望对你有所帮助!