C# 重写WebAPI控制器命名约定不起作用
我很难理解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
[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,一切正常。。。