没有找到c# WebApi2操作
本文关键字:WebApi2 操作 | 更新日期: 2023-09-27 17:52:17
我有这样的动作:
[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" }
);
这是trace:
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',
但是,没有找到该操作。路线不对吗?
为"number"添加段,并为controller和number定义默认值(将其设置为可选)。那么它应该可以工作。
的例子:
config.Routes.MapHttpRoute(
name: "ApiByAction",
routeTemplate: "api/{controller}/{action}/{number}",
defaults: new { number = RouteParameter.Optional }
);
希望这对你有帮助。祝你过得愉快,
阿尔贝托。
问题解决。我的控制器继承了一个基本控制器,这个基本控制器必须创建一个名为Find的虚拟方法它们也有相同的action name属性
你可以使用data Annotation Route top of Action。
但不建议这样做,因为这与OOP中的封装冲突。