0

Salut J'ai ce service RESThomonymie dans ASP.NET WebAPI routage à l'aide d'action

  • GET admin/delegateduser
  • GET admin/delegateduser/id
  • GET delegateduser

Je réussissais configuration de l'itinéraire avec ce mappage:

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


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

Et ce contrôleur

public class AdminController : ApiController 
{ 
    // GET api/admin/delegatedusers 
    [ActionName("delegatedusers")] 
    public IEnumerable<x> Get() 
    { 
    } 

    // GET api/delegatedusers/<userid> 
    [ActionName("delegatedusers")] 
    public x Get(String id) 
    { 
    } 
} 

public class DelegatedUsersController : ApiController 
{ 
    public x Get() 
    { 
    } 
} 

Le problème est que j'ajoute une nouvelle méthode qui est pas correctement résolu. La méthode est

  • SUPPRIMER enrollrequest/id

En utilisant cette carte et contrôleur

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

public class EnrollRequestController : ApiController 
{  
    /// DELETE api/enrollrequest/<id> 
    public void Delete(String id) 
    { 
    } 
} 

Si je mets le routMapping DefaultApi au-dessus du fichier WebApiConfig alors cette nouvelle méthode est résolu mais GET admin/delegateduser ne l'est pas. Il semble donc que ces deux méthodes entrent en conflit sur les résolutions d'URL.

Comment serait la bonne façon de cartographier les méthodes? Peut être tout devrait être plus simple et je me suis trop compliqué ....

Toute aide est la bienvenue.

Merci d'avance.

+0

Pourquoi le HttpMethod pas spécifié pour les points finaux ([HttpDelete], [HttpPost], [HttpGet], [HttpPut])? Avez-vous envisagé d'utiliser [AttributeRouting] (http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2)? – boosts

+0

Salut boosts. Théoriquement, il n'est pas nécessaire d'indiquer la méthode car le nom de la méthode commence par Get, Delete. De toute façon j'ai déjà essayé de le spécifier sans changement. J'utilise Web API 1 donc j'ai peur que le AttributeRouting ne soit pas disponible. –

Répondre

0

Enfin, je trouve la solution,

Le conflit a été que SUPPRIMER enrollrequest/et GET admin/delegateduser à la fois en forme avec les règles

{controller}/id 
{controller}/action 

je résous que l'ajout d'une contrainte de cette façon:

config.Routes.MapHttpRoute(
      name: "ActionApiWithId", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional }, 
      constraints: new { action = "delegatedusers" } 
     );  

maintenant, l'appel SUPPRIMER enrollrequest/ne correspond pas la route parce que le ne fullfill la contrainte.