ASP.NET Web API:在控制器上找不到操作

4

这件事情真的让我苦恼了。

路由:

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

Controller:

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错误,显示:
“No action was found on the controller 'Lookups' that matches the name 'all'.”
如有帮助将不胜感激。
编辑: 最终我弄明白了。 由于依赖关系不正确,所以发生了这种情况。 VS2012自动解析操作为system.web.mvc.actionnameattribute,而我需要的是system.web.http.actionnameattribute。
奇怪的问题,但无论如何,我希望这对其他人有所帮助。
1个回答

1

Jakob Li,

编辑:

您正在重命名控制器,但没有指定方法。 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中的路由

希望对您有所帮助!


所以我试过了那种方式,但一直得到“httpget不包含一个带有1个参数的构造函数”的错误。不过还是谢谢你的提示。 - jakli
嘿@jakli,看起来你在这里使用的版本比我的旧!我将posto更改为另一种方法,请看一下并告诉我它是否适用于你!在这里对我来说运行得很好! :) - Fals

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接