web-dev-qa-db-fra.com

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 suis conscient que j'ai besoin d'un contrôleur dérivé d'ApiController, mais c'est à peu près tout ce que je sais.

Faites-moi savoir si j'ai besoin de fournir plus de détails.

356
aknuds1

Les étapes que je devais accomplir étaient les suivantes:

  1. Ajoutez une référence à System.Web.Http.WebHost.
  2. Ajoutez App_Start\WebApiConfig.cs (voir l’extrait de code ci-dessous).
  3. Importer un espace de noms System.Web.Http dans Global.asax.cs.
  4. Appelez WebApiConfig.Register(GlobalConfiguration.Configuration) dans MvcApplication.Application_Start() (dans le fichier Global.asax.cs), avant en enregistrant le chemin d'application Web par défaut, comme cela aurait été prioritaire.
  5. Ajoutez un contrôleur dérivé de System.Web.Http.ApiController.

Je pourrais alors en apprendre assez sur le didacticiel (votre première API Web ASP.NET) pour définir mon contrôleur 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 du 10.16.2015:

Word l'a, le package NuGet Microsoft.AspNet.WebApi doit être installé pour que ce qui précède fonctionne.

443
aknuds1

MISE À JOUR 22/11/2013 - il s'agit du dernier package WebApi:

Install-Package Microsoft.AspNet.WebApi

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

Install-Package AspNetWebApi

Plus détails .

76
cdeutsch

Pour ajouter WebAPI dans mon projet MVC 5.

  1. Ouvrez la console du gestionnaire de paquets NuGet et lancez-la.

    PM> Install-Package Microsoft.AspNet.WebApi
    
  2. Ajouter des références à System.Web.Routing, System.Web.Net et System.Net.Http dlls s'il n'y en a pas déjà

  3. Cliquez avec le bouton droit sur le dossier contrôleurs> ajouter un nouvel élément> Web> Ajouter un contrôleur API Web.

  4. Web.config sera modifié en conséquence par VS

  5. Ajoute la méthode Application_Start s'il n'y est pas déjà

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
    
  6. Ajouter la classe suivante (j'ai ajouté dans le fichier global.asax.cs)

    public static class WebApiConfig
    {
         public static void Register(HttpConfiguration config)
         {
             // Web API routes
             config.MapHttpAttributeRoutes();
    
             config.Routes.MapHttpRoute(
                 name: "DefaultApi",
                 routeTemplate: "api/{controller}/{id}",
                 defaults: new { id = RouteParameter.Optional }
             );
         }
     }
    
  7. Modifier la méthode de l'API Web en conséquence

    namespace <Your.NameSpace.Here>
    {
        public class VSController : ApiController
        {
            // GET api/<controller>   : url to use => api/vs
            public string Get()
            {
                return "Hi from web api controller";
            }
    
            // GET api/<controller>/5   : url to use => api/vs/5
            public string Get(int id)
            {
                return (id + 1).ToString();
            }
        }
    }
    
  8. Reconstruire et tester

  9. Construire une page HTML simple

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>    
        <script src="../<path_to_jquery>/jquery-1.9.1.min.js"></script>
        <script type="text/javascript">
            var uri = '/api/vs';
            $(document).ready(function () {
                $.getJSON(uri)
                .done(function (data) {
                    alert('got: ' + data);
                });
    
                $.ajax({
                    url: '/api/vs/5',
                    async: true,
                    success: function (data) {
                        alert('seccess1');
                        var res = parseInt(data);
                        alert('got res=' + res);
                    }
                });
            });
        </script>
    </head>
    <body>
    ....
    </body>
    </html>
    
62
kheya

Dès que vous ajoutez un "Contrôleur WebApi" dans le dossier des contrôleurs, 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 noms suivantes:

    using System.Web.Http; using System.Web.Routing;

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

    void protégé Application_Start () {}

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

    GlobalConfiguration.Configure (WebApiConfig.Register);

26
Teoman shipahi

Vous pouvez installer depuis nuget comme image ci-dessous:

enter image description here

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

Install-Package Microsoft.AspNet.WebApi
22
cuongle

Avant de commencer à fusionner des projets MVC et Web API, je vous conseillerais de lire les informations concernant inconvénients et avantages afin de les séparer en différents projets. Une chose très importante (la mienne), ce sont les systèmes d’authentification, qui sont totalement différents.

SI vous devez 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 (vous n'avez pas besoin de conserver la session, les requêtes HTTP simples, etc.), mais pas MVC.

Pour examiner les différences d'implémentations, créez simplement 2 projets différents dans Visual Studio 2013 à partir de modèles: un pour MVC et un pour Web API (n'oubliez pas d'activer "Authentification individuelle" lors de la création). Vous verrez beaucoup de différence dans AuthencationControllers.

Alors, soyez conscient.

19
Yarkov Anton

NOTE: ceci est juste une abréviation de cette réponse ci-dessus

  1. Ouvrez la console du gestionnaire de paquets NuGet et lancez-la.

    PM> Install-Package Microsoft.AspNet.WebApi
    
  2. Ajouter des références à System.Web.Routing, System.Web.Net et System.Net.Http dlls s'il n'y en a pas déjà

  3. Ajouter la classe suivante

    public static class WebApiConfig
    {
         public static void Register(HttpConfiguration config)
         {
             // Web API routes
             config.MapHttpAttributeRoutes();
    
             config.Routes.MapHttpRoute(
                 name: "DefaultApi",
                 routeTemplate: "api/{controller}/{id}",
                 defaults: new { id = RouteParameter.Optional }
             );
         }
     }
    
  4. Ajoutez la méthode Application_Start s'il n'y en avait pas déjà (dans le fichier global.asax.cs)

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
    
  5. Cliquez avec le bouton droit sur le dossier contrôleurs> ajouter un nouvel élément> Web> Ajouter un contrôleur API Web.

    namespace <Your.NameSpace.Here>
    {
        public class VSController : ApiController
        {
            // GET api/<controller>   : url to use => api/vs
            public string Get()
            {
                return "Hi from web api controller";
            }  
        }
    }
    
5
Hakan Fıstık

La solution ci-dessus fonctionne parfaitement. Je préfère choisir l'option API Web lors de la sélection du modèle de projet, comme indiqué dans l'image ci-dessous.

Remarque: La solution fonctionne avec Visual Studio 2013 ou une version ultérieure. La question initiale avait été posée en 2012 et c'était en 2016, ajoutant donc une solution Visual Studio 2013 ou supérieure.

Project template showing web API option

3

J'ai eu le même problème, la solution était si facile

Faites un clic droit sur la solution pour installer Microsoft.ASP.NET.WebApi à partir de "Gérer le package Nuget pour la solution".

livre c'est tout;)

0
iDeveloper