[英]C# WebApi2 action not found
我有这个动作:
[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',
但是,找不到该动作。 路线不正确吗?
添加“数字”部分,并定义控制器和数字的默认值(将其设置为可选)。 然后它应该工作。
例:
config.Routes.MapHttpRoute(
name: "ApiByAction",
routeTemplate: "api/{controller}/{action}/{number}",
defaults: new { number = RouteParameter.Optional }
);
希望这可以帮助。 祝你今天愉快,
阿尔贝托
问题解决了。 我的控制器是从基本控制器继承的,并且该基本控制器必须使用名为Find的虚拟方法,并且它们还具有相同的动作名称属性。
您可以在操作顶部使用数据注释路由。
但这是不推荐的,因为与OOP中的封装冲突。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.