4

所以这真的让我很头疼。

路线:

            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 错误消息:

“在与名称‘all’匹配的控制器‘查找’上没有找到任何操作。”

任何帮助,将不胜感激

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

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

4

1 回答 1

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.NET Web API 中的路由

希望对您有所帮助!

于 2013-04-30T13:12:04.993 回答