2017-10-17 11 views
1

J'ai créé une API à l'aide de Visual Studio et supprimé tout le contenu que je ne voulais pas utiliser. Tout va bien jusqu'à maintenant. Maintenant, j'essaye de changer la route par défaut pour mon API, mais ça ne marche pas. Je veux appeler localhost et je veux que mon API redirige vers QueryController.L'itinéraire par défaut ne fonctionnait pas lorsqu'il était modifié

Mon RouteConfig.cs est comme ceci:

routes.MapRoute (
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Query", action = "Get", id = UrlParameter.Optional } 
); 

Mon QueryController.cs est comme ceci:

public class QueryController: ApiController 
{ 
    public ResultRecord Get ([FromUri] RequestRecord request) 
    { 
     ... 
    } 
} 

Mon Global.asax:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    GlobalConfiguration.Configure (WebApiConfig.Register); 
    FilterConfig.RegisterGlobalFilters (GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes (RouteTable.Routes);  
} 

Quand j'appelle localhost : port/api/Query cela fonctionne bien. Mais si je ne lance que localhost: port, il n'atteint jamais QueryController. Des idées pourquoi? J'ai lu d'autres discussions mais je ne peux pas changer cela.

+0

Avez-vous dans Global.asax cette ligne de code? 'GlobalConfiguration.Configure (WebApiConfig.Register);' – MacakM

+0

Dans votre URL: "{controller}/{action}/{id}" il vous manque 'api', ce n'est pas le problème? – MacakM

+0

@MacakM J'ai remarqué cela. En fait, après avoir changé mon WebApiConfig.cs cela a bien fonctionné =) – Crasher

Répondre

1

Vous avez modifié l'itinéraire étant utilisé pour vos contrôleurs MVC, pas pour vos contrôleurs API Web:

routes.MapRoute (
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Query", action = "Get", id = UrlParameter.Optional } 
); 

Notez comment cet itinéraire ne comprend pas api/.

Vous devez changer votre itinéraire WebAPI, quelque chose comme:

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

Cela vous permettra de cibler localhost:port/api et arriver à QueryController.Get.

+0

Nailed it! Je viens de changer mon WebApiConfig et ça a marché \ o/merci @Kirk – Crasher