繁体   English   中英

找不到C#WebApi2操作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM