2016-06-12 26 views
8

Ho un controller APIRimuovi "api" prefisso dal Web API URL

public class MyController : ApiController { ... } 

Di default è mappato a URL mysite/api/My/Method, e vorrei che avesse URL senza il prefisso "api": mysite/My/Method

L'attributo controller [RoutePrefix("")] non mi è stato d'aiuto.

Esistono altri modi per raggiungere questo obiettivo?

+2

La parola 'api' è configurata nel metodo Register della classe statica WebApiConfig. – Fabio

+0

Stai usando il routing degli attributi o il routing basato su convenzione? – Nkosi

risposta

11

la registrazione di default si trova in genere WebApiConfig e tende a guardare come questo

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 } 
     ); 
    } 
} 

È necessario modificare il routeTemplate nel setup convenzione-based.

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 } 
     ); 
    } 
} 

Do atto che se questo progetto è condiviso con MVC che il motivo per il prefisso api è stato quello di evitare conflitti percorso tra le due strutture. Se l'API Web è l'unica cosa utilizzata, non dovrebbe esserci alcun problema.

+1

Vorrei solo ricordare che l'accountController predefinito ha '[RoutePrefix (" api/Account ")]', quindi, affinché questo funzioni anche per questo controller, è necessario rimuovere 'api /' anche da qui. –