找不到C#WebApi2操作

时间:2014-03-24 10:44:54

标签: c# asp.net-web-api

我有这个动作:

    [ActionName("Find")]
    [HttpGet]
    public override IHttpActionResult Find(string number)
    {
        //Get customer by number...
    }

这是路线:

        config.Routes.MapHttpRoute(
            name: "ApiByAction",
            routeTemplate: "api/{controller}/{action}",
            defaults: new { action = "Get" }
        );

这是追踪:

System.Web.Http.Request;;;http://localhost:12345/api/Customers/Find?number=100  
System.Web.Http.Controllers;DefaultHttpControllerSelector;SelectController;Route='controller:Customer,action:Find'
System.Web.Http.Controllers;DefaultHttpControllerSelector;SelectController;Customer
System.Web.Http.Controllers;HttpControllerDescriptor;CreateController;
System.Web.Http.Controllers;HttpControllerDescriptor;CreateController;CustomerController
System.Web.Http.Controllers;CustomerController;ExecuteAsync;
System.Web.Http.Action;ApiControllerActionSelector;SelectAction;
System.Web.Http.Action;ApiControllerActionSelector;SelectAction;
System.Web.Http.Controllers;CustomerController;ExecuteAsync;
System.Net.Http.Formatting;DefaultContentNegotiator;Negotiate;Type='HttpError',

但是,找不到该操作。路线不正确吗?

3 个答案:

答案 0 :(得分:0)

添加“number”的段并定义controller和number的默认值(将其设置为可选)。然后它应该工作。

示例:

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

希望这会有所帮助。祝你有愉快的一天,

阿尔贝托

答案 1 :(得分:0)

问题解决了。我的控制器继承自一个基本控制器,这个基本控制器必须使用名为Find的虚拟方法,它们也有相同的动作名称属性。

答案 2 :(得分:0)

您可以使用数据注释路线顶部的操作。

但这不是推荐,因为与OOP中的封装冲突。