C# 重写WebAPI控制器命名约定不起作用

C# 重写WebAPI控制器命名约定不起作用,c#,rest,asp.net-web-api,C#,Rest,Asp.net Web Api,我很难理解WebAPI路由是如何工作的。这就是我的控制器的外观: [RoutePrefix("order-mgmt")] public class OrderController : ApiController { [HttpGet] [Route("execute")] public HttpResponse ExecOrder(string clordid) { // ... return Request.CreateRespo

我很难理解WebAPI路由是如何工作的。这就是我的控制器的外观:

[RoutePrefix("order-mgmt")]
public class OrderController : ApiController
{
    [HttpGet]
    [Route("execute")]
    public HttpResponse ExecOrder(string clordid)
    {
        // ...
        return Request.CreateResponse(HttpStatusCode.NoContent);
    }

    [HttpGet]
    [Route("reject")]
    public HttpResponse RejectOrder(string clordid)
    {
        // ...
        return Request.CreateResponse(HttpStatusCode.NoContent);
    }
}
这是我的启动类和配置

public class Startup 
{ 
    public void Configuration(IAppBuilder appBuilder) 
    { 
        // Configure Web API for self-host. 
        var config = new HttpConfiguration(); 

        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute( 
            name: "ActionApi", 
            routeTemplate: "api/{controller}/{action}/{id}", 
            defaults: new { id = RouteParameter.Optional } 
        ); 

        appBuilder.UseWebApi(config); 
    } 
}
我希望我能够通过http://localhost:port/api/order-管理/执行?clordid=


然而,这不起作用。控制器仍然只能通过api/order/execute访问。我真的不明白我做错了什么。非常感谢您的帮助

尝试删除[RoutePrefixorder管理]

那就这样做吧

[Route("api/order-mgmt/execute/{clordid}")]
public HttpResponse ExecOrder(string clordid)

// then you can reach it in this route
// api/order-mgmt/execute/YOUR_STRING

我猜没有找到自定义匹配项,因此可以退回到url中的/api/标准路由。你能试试localhost:port/order-mgmt/execute吗?clordid=或者把你的routeprefix更新成RoutePrefixapi/order-mgmtt谢谢你,笨蛋。。。此外,我还删除了关于基于约定路由的配置部分,因此只有config.MapHttpAttributeRoutes可用,并添加了RoutePrefixapi/order mgmt,而不是如您所建议的RoutePrefixorder mgmt,一切正常。。。