2017-05-09 1 views
0

Je voudrais créer api de repos, mais j'ai un problème avec le routage. Cette URL est ok: localhost/project/controller/action/id, mais je voudrais aussi cette URL localhost/project/controller/id. Par exemple: localhost/project/article/5: ArticleController.Get(int id) Ceci est mon code: contrôleur de projetASP MVC routage api de repos

[HttpGet] 
[Route("project/{id}")] 
public JsonResult Get(int id) 
{ 
} 

Route config:

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

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

Quand j'appelle URL localhost/projet/article/5, message d'erreur est un organisme public La méthode d'action '5' n'a pas été trouvée sur le contrôleur 'ArticleController'.

Où est le problème? Merci

+0

Quelle version de mvc utilisez-vous? – Jamiec

Répondre

1

Vous pouvez utiliser attribute routing

Exemple:

[HttpGet] 
[Route("project/{controller}/{action}/{id}")] 
public JsonResult Get(int id) 
{ 
} 

OU

Default Route Table

Exemple:

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.MapMvcAttributeRoutes(); 
      routes.MapRoute(
       name: "Api", 
       url: "project/{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

     } 

Selon vos besoins, votre routage est:

[HttpGet] 
[Route("project/article/{id:int}")] 
public JsonResult Get(int id) 
{ 
} 

OU

routes.MapRoute(
        name: "Api", 
        url: "project/article/{id}", 
        defaults: new { controller = "ArticleController", action = "Get", id = UrlParameter.Optional } 
       ); 
+0

Merci, mais cela ne fonctionne pas correctement. J'ai besoin de carte URL localhost/project/article/5 à ArticleController.Get (int id) – bluray

+0

Je suis désolé, cela ne fonctionne pas correctement. Message d'erreur est une méthode d'action publique '5' n'a pas été trouvé sur le contrôleur – bluray

+0

j'ai créé simple exemple ApiController: ' [HttpGet] [Route ("api/exemple")] public void Get (int id) { } 'Quand j'appelle url api/example/1 retour 404 – bluray