ASP.Net WebAPI de soutien de secteur
Je suis en train d'ajouter quelques WebAPI soutien à mon asp.net 4 RC site et souhaitez le mettre dans une zone. J'ai vu que quelqu'un a réussi à obtenir ce fonctionnement, sur la bêta (ici) , mais pour être honnête, n'ont aucune idée de ce que je fais dans la RC.
Personne n'a réussi à ajouter de soutien de secteur pour le RC de WebAPI?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez mettre des contrôleurs d'Api dans n'importe quel dossier vous voulez, vous n'avez pas besoin de créer une Zone comme vous l'avez fait pour MVC. Ce que j'ai l'habitude de le faire est de créer un sous-dossier " Api "à l'intérieur" des Contrôleurs du dossier de la MVC du site. Il suffit de s'inscrire itinéraires pour vos contrôleurs d'Api et il va fonctionner.
Les zones d'appui dans l'API web Url
Vous avez simplement à s'inscrire à l'API de Web route.
Mais cette route doit être enregistré avant les autres itinéraires. Si non, les requêtes à l'API web sera, à tort, manipulés comme s'ils étaient un MVC action.
Lorsque vous êtes à l'aide de domaines, vous devez prendre en compte que les inscriptions pour les domaines des routes est généralement effectuée avant l'enregistrement de la non-zone de routes. I. e, dans
Global.asax Application_Start
vous avez ces lignes de code, dans cet ordre:Le premier appel de méthode à invoquer la
RegisterArea
méthode de chaque trouvéxxxAreaRegistration
classe. Et, à l'intérieur de cette configuration, vous aurez généralement quelque chose comme ceci:Si vous voulez avoir des contrôleurs d'API Web à l'intérieur de cette zone, vous devez ajouter l'API Web de l'itinéraire avant celui-ci, comme suit:
Dans ce cas, je suis en supposant que vous souhaitez appeler votre contrôleurs d'API à l'aide d'une url comme ceci:
/AreaName/Api/ControllerName/Id
.J'ai l'habitude de stocker les contrôleurs d'API Web à l'intérieur d'un
Api
dossier à l'intérieur de la zone dossier, mais il n'a pas d'importance où vous les placez. Prendre en compte le fait que les contrôleurs d'API va être trouvés partout où ils sont et, si vous utilisez le même nom pour eux dans différents domaines, vous obtiendrez des conflits: ils sont trouvés par le nom de la classe, et non par le pleinement qualifié (espaces de noms).En quelques mots: il n'y a pas de réel soutien pour les zones, mais vous pouvez les inclure dans leurs propres dossiers à l'intérieur de ces zones, et les rendre disponibles sur les URL qui ressemblent à ceux des contrôleurs MVC à l'intérieur de zones.
Soutenir route espaces de noms
Que si vous voulez avoir des contrôleurs d'API Web avec le même nom dans différents domaines? Si vous voulez vraiment donner un réel soutien pour les zones de contrôleurs d'API Web, vous avez à mettre en œuvre et d'enregistrer une coutume IHttpControllerSelector.
Vous avez une bonne explication et un exemple de mise en œuvre ici: ASP.NET l'API Web: l'Utilisation des espaces de noms à la Version Web Api
Cet exemple utilise les espaces de noms pour la gestion des versions, mais le code peut être légèrement modifié pour prendre en charge les zones d'espaces de noms.
ASP.NET MVC 4 ne prend pas en charge WebAPI dans les Régions.
Il est possible d'étendre
DefaultHttpControllerSelector
pour ce faire, mais vous devez lire attentivement cet excellent (et courte) de l'article: ASP.NET MVC 4 RC: Arriver WebApi et les Zones de jouer gentiment. Il fonctionne très bien.J'ai testé cette solution avec portable domaines (MVCContrib).
Fondamentalement, vous devez:
PortableAreaRegistration.RegisterArea()
méthode): vous pouvez copier la classe statique en PA du projet, mais je suggère de le mettre dans un projet partagé.DefaultHttpControllerSelector
) dans le projet hôte.Ajouter au Mondial.asax App_Start() la ligne suivante:
GlobalConfiguration.La Configuration.Services.Remplacer(typeof(IHttpControllerSelector), de nouvelles AreaHttpControllerSelector(GlobalConfiguration.De Configuration));
Il y a un problème avec la mise en œuvre de
AreaHttpControllerSelector
: le nom de domaine doit correspondre à la ApiController de l'espace de noms. Par exemple, ceci est monPortableAreaRegistration
classe:Assurez-vous d'enregistrer l'API route avant que la route par défaut, sinon la route par défaut sera goulûment de capturer tout!
Juste pour l'achèvement, les attributs suivants, qui pourraient aider les gens à sortir d'une impasse (qui ne suivront pas eric conseils ci-dessus...)
http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2