371 votes

Comment ajouter une API Web à un projet d'application Web ASP.NET MVC 4 existant ?

Je souhaite ajouter un API Web ASP.NET à un projet d'application Web ASP.NET MVC 4, développé dans Visual Studio 2012. Quelles étapes dois-je suivre pour ajouter une API Web fonctionnelle au projet ? Je sais que j'ai besoin d'un contrôleur dérivant de ApiController, mais c'est à peu près tout ce que je sais.

Faites-moi savoir si je dois fournir plus de détails.

471voto

aknuds1 Points 9918

Les étapes que je devais effectuer étaient :

  1. Ajouter une référence à System.Web.Http.WebHost .
  2. Ajouter App_Start\WebApiConfig.cs (voir l'extrait de code ci-dessous).
  3. Importer l'espace de noms System.Web.Http en Global.asax.cs .
  4. Appelez WebApiConfig.Register(GlobalConfiguration.Configuration) en MvcApplication.Application_Start() (en fichier Global.asax.cs ), avant d'enregistrer la route par défaut de l'application Web, qui aurait autrement la priorité.
  5. Ajouter un contrôleur dérivant de System.Web.Http.ApiController .

Je pourrais alors apprendre suffisamment de le tutoriel (Your First ASP.NET Web API) pour définir mon contrôleur d'API.

App_Start \WebApiConfig.cs :

using System.Web.Http;

class WebApiConfig
{
    public static void Register(HttpConfiguration configuration)
    {
        configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
            new { id = RouteParameter.Optional });
    }
}

Global.asax.cs :

using System.Web.Http;

...

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

Mise à jour 10.16.2015 :

Le paquet NuGet Microsoft.AspNet.WebApi doit être installé pour que le programme ci-dessus fonctionne.

13 votes

C'était vraiment utile. J'ai dû ajouter une référence à System.Net.Http mais à part ça, ça a marché comme sur des roulettes !

1 votes

Cool, je viens de tester en créant un nouveau projet MVC 4 Internet et il fait déjà référence à System.Net.Http . Votre cas est donc peut-être légèrement différent ?

0 votes

Oui, la mienne était une application MVC 3 que j'avais manuellement mise à jour vers MVC 4. Je ne sais pas si cela peut être la raison.

81voto

CDeutsch Points 1643

UPDATE 11/22/2013 - il s'agit du dernier paquet WebApi :

Install-Package Microsoft.AspNet.WebApi

Réponse originale (il s'agit d'un ancien paquet WebApi)

Install-Package AspNetWebApi

Plus de détails .

3 votes

Depuis 2013, il s'agit d'un paquet hérité et vous voulez Install-Package Microsoft.AspNet.WebApi maintenant. Voir nuget.org/packages/Microsoft.AspNet.WebApi

29voto

Teoman shipahi Points 7988

Dès que vous ajoutez un "WebApi Controller" dans le dossier controllers, Visual Studio s'occupe automatiquement des dépendances ;

Visual Studio a ajouté l'ensemble complet de dépendances pour ASP.NET Web API 2 au projet 'MyTestProject'.

Le fichier Global.asax.cs du projet peut nécessiter des modifications supplémentaires pour activer l'API Web ASP.NET.

  1. Ajoutez les références d'espace de nom suivantes :

    en utilisant System.Web.Http ; en utilisant System.Web.Routing ;

  2. Si le code ne définit pas déjà une méthode Application_Start, ajoutez la méthode suivante :

    protected void Application_Start() { }

  3. Ajoutez les lignes suivantes au début de la méthode Application_Start :

    GlobalConfiguration.Configure(WebApiConfig.Register) ;

0 votes

C'est de loin le moyen le plus simple d'y parvenir maintenant.

1 votes

Ne fonctionne pas ici. 1. Nuget : Install-Package Microsoft.AspNet.WebApi 2. Ajoutez le nouvel élément "Classe de contrôleur API Web (v2.1)". Résultat : ajoute le contrôleur d'api mais ne change rien. Application_Start . Avec Owin.

2 votes

C'est la bonne réponse lorsque vous avez vs2015 - update 3 et que vous ajoutez le contrôleur web api 2.

22voto

Cuong Le Points 29324

Vous pouvez installer à partir de nuget comme l'image ci-dessous :

enter image description here

Ou, exécutez la ligne de commande ci-dessous dans la console du gestionnaire de paquets :

Install-Package Microsoft.AspNet.WebApi

3 votes

Alors, que dois-je faire d'autre à part ajouter le contrôleur ? C'est la raison pour laquelle j'ai posé cette question en premier lieu, le tutoriel ne le dit pas vraiment puisqu'il suppose un projet d'API Web. J'ai ajouté un contrôleur API, mais il n'est pas routé vers.

1 votes

Le didacticiel n'a pas été d'une grande aide en ce qui concerne l'ajout d'une API Web à un projet existant. J'ai donc trouvé la solution à partir d'un projet d'API Web, comme indiqué dans ma réponse.

0 votes

Je suis d'accord, il semble que cette plomberie soit déjà installée si vous utilisez le modèle de projet Web App.

21voto

OptikLab Points 93

Avant de commencer à fusionner des projets MVC et API Web, je vous suggère de lire le document suivant pour et contre de les séparer en tant que projets différents. Une chose très importante (la mienne) concerne les systèmes d'authentification, qui sont totalement différents.

Si vous avez besoin d'utiliser des requêtes authentifiées à la fois sur MVC et sur l'API Web, vous devez vous rappeler que l'API Web est RESTful (il n'est pas nécessaire de conserver la session, requêtes HTTP simples, etc.

Pour examiner les différences d'implémentation, il suffit de créer deux projets différents dans Visual Studio 2013 à partir de modèles : un pour MVC et un pour Web API (n'oubliez pas d'activer l'authentification individuelle pendant la création). Vous verrez beaucoup de différences dans les AuthencationControllers.

Alors, faites attention.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X