2016-06-12 44 views
8

我有一个API控制器删除“API”从网络API网址前缀

public class MyController : ApiController { ... } 

默认情况下它被映射到URL mysite/api/My/Method,我想它有没有URL“API”前缀: mysite/My/Method

设置控制器属性[RoutePrefix("")]没有帮助我。

还有其他方法可以实现吗?

+2

'api'字在WebApiConfig静态类的Register方法中配置。 – Fabio

+0

您是使用属性路由还是基于约定的路由? – Nkosi

回答

11

默认的注册通常在WebApiConfig发现往往看起来像这样

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Attribute routing. 
     config.MapHttpAttributeRoutes(); 

     // Convention-based routing. 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

您需要在以公约为基础设置编辑routeTemplate

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Attribute routing. 
     config.MapHttpAttributeRoutes(); 

     // Convention-based routing. 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

请注意,如果这个项目与MVC共享,对于api前缀的原因是为了避免两个框架之间的路线冲突。如果Web API是唯一被使用的东西,那么应该没有问题。

+1

我只想提到默认的AccountController有'[RoutePrefix(“api/Account”)]',所以为了使这个控制器也能工作,你需要从这里删除'api /'。 –