我有这个动作:
[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',
但是,找不到该操作。路线不正确吗?
答案 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中的封装冲突。