L'API Web MVC solution dans le projet distinct
Je suis entrain de créer un nouveau MVC4 projet, et de la recherche m'a conduit à croire que la communication de javascript côté serveur est mieux maintenant, grâce à l'API web plutôt que sur les actions du contrôleur. Est ma compréhension correcte sur ce point?
Je suis en supposant que je peux partager tous mes attributs etc entre l'API web et des contrôleurs MVC sur le visage, il ne semble pas un énorme changement pour moi.
Quand je suis à la configuration des applications, je souhaite scinder les composants dans les projets. Mon plan était d'avoir un projet MVC et un projet d'API web. Mais j'ai couru dans les questions. Par exemple, j'ai fini avec 2 applications en tant que tel, séparé de routage configurer etc etc.
Donc ma question est, dans une application MVC devrait le web API cadre de siéger au sein d'un même projet, ou si le web API être séparés dans un projet qui lui est propre et de travail autour des questions?
Vous devez vous connecter pour publier un commentaire.
Malheureusement vous êtes dans l'erreur à ce sujet - je suis en supposant que je peux partager tous mes attributs etc entre l'api web et des contrôleurs mvc sur le visage, il ne semble pas un énorme changement pour moi.
De nombreux concepts utilisés par les API Web et MVC, même si semblables au premier coup d'œil, ne sont effectivement pas compatible. Par exemple, les API Web attributs sont
System.Web.Http.Filters.Filter
et MVC attributs sontSystem.Web.Mvc.Filter
- et ils ne sont pas interchangeables.Même chose s'applique à de nombreux autres concepts - modèle de liaison (des mécanismes complètement différents), des voies de communication (Web API utilise HTTPRoutes pas de Routes, même s'ils fonctionnent sur le même sous-jacent RouteTable), résolution de dépendances (pas compatible) et plus encore - même si semblables à la surface, sont très différents dans la pratique. En outre, les API Web ne dispose pas d'un concept de zones.
En fin de compte, si vous essayez de faire est d'avoir une "nouvelle tendance de la" manière de servir le contenu JSON - réfléchir à deux fois avant d'aller en bas de ce chemin. Certes, je ne recommanderais pas de refactoring de code existant, sauf si vous êtes vraiment à la recherche en embrassant HTTP et la construction de votre application dans une bonne voie.
Tout dépend vraiment de ce que vous construisez. Si vous commencez un nouveau projet, et tous vous avez besoin est de servir quelques JSON pour faciliter votre application web, à condition que vous prêt à vivre avec une certaine potentiellement code en double (comme les trucs que j'ai mentionné ci-dessus), les API Web pourrait facilement être hébergé dans le même projet que ASP.NET MVC.
Je tiens seulement à séparer les API Web dans un projet distinct, si vous allez construire une bonne API pour votre service en ligne, peut-être à être consommés par les clients externes, ou par différents appareils, tels que le ravitaillement de vos applications mobiles.
De l'OMI, de la sécurité et du déploiement de la voiture de votre décision. E. g., si votre application MVC utilise l'authentification par Formulaires, mais qui vous intéresse à l'aide de l'authentification de Base (avec SSL) pour votre API, des projets distincts, allez faire votre vie plus facile. Si vous souhaitez héberger votre site http://www.example.com mais l'hôte de votre API api.example.com (vs http://www.example.com/api), des projets distincts qui va rendre votre vie plus facile. Si vous vous séparez de vos projets et sous-domaine en conséquence et vous avez l'intention de tirer parti de votre propre API de votre MVC application, vous devez comprendre la façon de traiter avec le Même La Politique De L'Origine question pour côté client, les appels vers votre API. Des solutions communes pour ce sont à tirer parti de jsonp ou De la SCRO (de préférence si vous le pouvez).
Mise à jour (3/26/2013): Officiel le soutien de la SCRO est à venir: http://aspnetwebstack.codeplex.com/wikipage?title=CORS%20support%20for%20ASP.NET%20Web%20API
Après un certain degré d'expérience (création de l'API pour les applications et pour mvc). J'ai surtout faire les deux.
J'ai créer un projet distinct pour les appels api qui viennent d'autres clients ou d'autres appareils (Android/IOS). Une des raisons est parce que l'authentification est différent, il est à base de jetons (pour garder apatrides). Je ne veux pas mélanger cela à l'intérieur de mon application MVC.
Pour mon javascript/jquery, les appels d'api pour mon application mvc, je tiens à garder les choses simples, j'ai donc inclure une api web à l'intérieur de mon application MVC. Je n'ai pas l'intention d'avoir des jeton d'authentification basée sur les avec mon appels d'api javascript, parce que bon, c'est dans la même application. Je peux utiliser
[authorize]
attribut sur une API d'extrémité, lorsqu'un utilisateur n'est pas connecté, il n'aura pas les données.En outre, lorsque vous traitez avec des caddies et que vous souhaitez stocker un utilisateurs panier dans une session (alors non connecté), vous devez avoir ceci dans votre API ainsi, si vous ajoutez/supprimer des produits via votre code javascript. Cela rendra votre API dynamique pour vous, mais permettra également de réduire la complexité de votre MVC-API.
Steven de SimpleInjector (Cio cadre) conseille deux projets distincts: Quelle est la différence entre DependencyResolver.SetResolver et HttpConfiguration.DependencyResolver dans WebAPI
Récemment, j'ai fait presque la même chose: j'ai commencé avec un nouveau MVC 4 projet d'application web en choisissant l'API Web modèle dans VS2012.
Cela va créer une API Web hébergé dans la même application que la MVC.
J'ai voulu déplacer le ApiControllers dans un projet de bibliothèque de classes. C'était assez facile, mais la solution était un peu caché.
Dans AssemblyInfo.cs de la MVC 4 ajouter projet similaire ligne de code
Maintenant, vous avez besoin de la classe LibraryRegistrator (n'hésitez pas à le nommer quoi que ce soit)
Dans le MVC 4 projet également ajouter une référence à la bibliothèque d'Api.
Maintenant, vous pouvez ajouter des contrôleurs d'Api à votre propre bibliothèque de classe (yourown.dll).
Même si votre projet est si complexe qu'elle nécessite deux "extrémités avant" alors je serais encore considérer seulement la séparation webapi dans un projet distinct, comme un dernier recours. Vous aurez le déploiement des maux de tête, et il serait difficile pour un débutant de comprendre la structure de votre solution. Pour ne pas mentionner les problèmes de routage.
Je voudrais avoir pour objectif de maintenir le système.web espace de noms isolés dans une "couche de présentation". Malgré la webapi pas être de présentation il fait toujours partie de l'interface de votre application. Aussi longtemps que vous gardez la logique dans votre domaine, et non pas votre contrôleurs vous ne devez pas exécuter dans trop de problèmes. Aussi, n'oubliez pas de faire usage de Domaines.
En plus de l'installation de la DLL pour le Web.L'Api.
Juste une Suggestion:
Créer une Méthode de classe pour être appelé app_start
[assembly: WebActivatorEx.PostApplicationStartMethod(typeof(API.AppWebActivator),"Le Départ")]
[assembly:WebActivatorEx.ApplicationShutdownMethod(typeof(API.AppWebActivator), "Arrêt")]
Enregistrer un site web.api de routes à l'intérieur de la Méthode Start
public static void Start() {
GlobalConfiguration.Configurer(WebApiConfig.Registre);
}
Référence au Projet au Projet Web. pour activer la Méthode de Démarrage.
Espère que cette aide.
J'ai essayé de diviser les contrôleurs d'API dans un nouveau projet. Tout ce que j'ai fait est de créer un nouveau projet de bibliothèque, déplacé les contrôleurs de l'intérieur dossier nommé API.
Puis ajout de la référence de la bibliothèque de projet pour le projet MVC.
La webAPI configuration est à gauche dans le projet MVC lui-même. Il fonctionne très bien.