Plusieurs Types de contrôleurs avec le même préfixe de l'Itinéraire ASP.NET Web Api
Est-il possible de séparer les GETs et des Postes en différentes API Contrôleur de types et d'y accéder en utilisant le même Préfixe de l'Itinéraire?
Voici mon contrôleurs:
[RoutePrefix("api/Books")]
public class BooksWriteController : EventStoreApiController
{
[Route("")]
public void Post([FromBody] CommandWrapper commandWrapper){...}
}
[RoutePrefix("api/Books")]
public class BooksReadController : MongoDbApiController
{
[Route("")]
public Book[] Get() {...}
[Route("{id:int}")]
public Book Get(int id) {...}
}
OriginalL'auteur user1145404 | 2014-04-15
Vous devez vous connecter pour publier un commentaire.
Web de l'API (1.x-2.x) ne prend pas en charge plusieurs attributs les routes avec le même chemin sur les différents contrôleurs. Le résultat est une 404, parce que tout le parcours correspond à plus d'un contrôleur et à ce point de l'API Web examinera le résultat ambigu.
Noter que MVC de Base prend en charge ce scénario remarque: MVC Cœur sert de MVC & Web API.
Si vous choisissez d'utiliser l'API Web 2.11 (ou plus récent), vous pouvez créer un itinéraire contrainte pour la méthode http par contrôleur et de l'utiliser à la place de la construite en Route de l'Attribut. L'exemple ci-dessous montre que vous pouvez utiliser RoutePrefix ou directement Routes (comme kmacdonald de réponse).
Ces deux classes de simplifier l'utilisation de la contrainte de la route attribut
Cette classe permet d'ajouter des contraintes à la route généré
C'est juste une route standard contrainte, nit: vous pouvez mettre en cache les contraintes de l'objet afin de réduire les allocations.
aucune raison spécifique pour laquelle vous avez besoin de la coutume
MethodConstraint
ici au lieu de réutiliser Système.Web.Http.Le routage.HttpMethodConstraint?Le point est le fait de contraindre la route elle-même. La propriété intégrée n'agit que dans la sélection de l'action qui s'exécute trop tard.
Dans le cas où quelqu'un est à la recherche à cette réponse et d'avoir des problèmes de nommage de l'itinéraire, puis la construction d'un itinéraire à l'aide de l'Url.Lien(...). Il y a une semblable réponse ici: stackoverflow.com/questions/40892637/... Les principales différences que j'ai vu étaient interfaces supplémentaires et l'utilisation de HttpMethodConstraint avec un tableau de HttpMethods. Quel que soit le cas, l'autre réponse permet à la route de nommage de toujours travailler à titre d'information.
Hésitez pas à mettre à jour la réponse 🙂
OriginalL'auteur Yishai Galatzer
Vous n'avez pas toujours besoin de spécifier un
RoutePrefix
sur votre contrôleur. vous pouvez simplement mettre la route directement sur le web méthodes:Cependant, j'imagine que votre
RoutePrefix
va fonctionner très bien sur les deux contrôleurs. Je pense que l'attributRoutePrefix
est utilisé en conjonction avec leRoute
attribut qui définit réellement la route. Cela signifie que tant que vous n'avez pas tout conflit entre les routes (c'est un biggie), vous devez être bien.OriginalL'auteur kmacdonald