没有找到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',

但是,没有找到该操作。路线不对吗?

没有找到c# WebApi2操作

为"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中的封装冲突。