web-dev-qa-db-fra.com

Projets MVC et Web Api dans la même solution

J'ai un projet MVC 4 assis au sommet d'une application à N niveaux. J'ai maintenant besoin de pouvoir utiliser l'application par programme. J'ai créé un nouveau projet d'API Web dans la même solution qui se trouve à côté du projet MVC, encore une fois au-dessus de l'application N-tier.

Mais je ne sais pas comment tout cela fonctionne car la couche MVC est le projet de démarrage: elle configure ma DI, mon automappeur, etc. et est le projet que je déploie sur le serveur.

Alors, comment tout cela devrait-il être mis en place? Puis-je configurer mon projet MVC pour acheminer tous les /api demandes au nouveau projet d'API Web? Ou le projet d'API Web doit-il être déployé séparément?

Je ne veux pas faire quoi que ce soit de non conventionnel, donc s'il y a une manière beaucoup plus courante de mettre cela en place, veuillez m'orienter dans la bonne direction.

Merci.

22
James

WebApi est une application alternative orientée services de Microsoft, tout comme WCF. Mais WCF utilise SOAP et WebAPI utilise le protocole HTTP pour la communication.

Donc, si vous utilisez WCF pour fournir le service pour votre application MVC, vous hébergerez ce service wcf séparément et consommerez son service par application MVC, EXACTEMENT de la même manière que vous devez héberger votre projet WebAPI séparément et fournir le service à votre application Web (MVC).

pour certaines raisons, si vous souhaitez qu'ils (MVC et WebAPI) soient utilisés dans le même projet, suivez les règles de cet article.

http://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspx

12
Alagesan Palani

J'ai fait la même chose hier. J'ai dans le même projet MVC 4 des Contrôleurs et ApiControllers réguliers.

Vous devez ajouter le routage dans Global Asax for WebApi:

WebApiConfig.Register(GlobalConfiguration.Configuration);

Jetez un œil à WebApiConfig:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

N'oubliez pas également d'ajouter les packages Nuget pour WebApi (si vous ne les avez pas déjà). Dans mon cas, je ne les avais pas parce que mon projet était à l'origine MVC 3 et a ensuite été mis à niveau.

8
Hugo Hilário

Vous avez juste besoin d'ajouter le routage et les contrôleurs API à votre site MVC existant où ils seront tous disponibles sous site/api/

0
Trevor Pilley