那么您的代码中有两个问题。您正在使用 MapRoute 而不是 MapHttpRoute。您还应该将更详细的路线放在第一位,这样它就不会被更通用的路线吞没:
routes.MapHttpRoute(
name: "Customer",
url: "api/Customer/{id}",
defaults: new { controller = "CustomerApi", action = "Get", id = UrlParameter.Optional }
);
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
现在,如果您希望您的解决方案更加通用(当您有更多需要像这样修改的控制器时),您可以使用自定义HttpControllerRouteHandler
转换传入控制器名称,这样您将能够保留默认路由。
首先您需要创建自定义HttpControllerRouteHandler
:
public class CustomHttpControllerRouteHandler : HttpControllerRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString() + "Api";
return base.GetHttpHandler(requestContext);
}
}
现在你可以像这样注册你的 HttpRoute:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
).RouteHandler = new CustomHttpControllerRouteHandler();
这样当你把Customer引擎会将其视为 URL客户API.