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.
Les étapes que je devais accomplir étaient les suivantes:
System.Web.Http.WebHost
.App_Start\WebApiConfig.cs
(voir l’extrait de code ci-dessous).System.Web.Http
dans Global.asax.cs
.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.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.
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 .
Pour ajouter WebAPI dans mon projet MVC 5.
Ouvrez la console du gestionnaire de paquets NuGet et lancez-la.
PM> Install-Package Microsoft.AspNet.WebApi
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à
Cliquez avec le bouton droit sur le dossier contrôleurs> ajouter un nouvel élément> Web> Ajouter un contrôleur API Web.
Web.config sera modifié en conséquence par VS
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);
}
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 }
);
}
}
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();
}
}
}
Reconstruire et tester
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>
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.
Ajoutez les références d'espace de noms suivantes:
using System.Web.Http; using System.Web.Routing;
Si le code ne définit pas déjà une méthode Application_Start, ajoutez la méthode suivante:
void protégé Application_Start () {}
Ajoutez les lignes suivantes au début de la méthode Application_Start:
GlobalConfiguration.Configure (WebApiConfig.Register);
Vous pouvez installer depuis nuget comme image ci-dessous:
Ou, exécutez la ligne de commande ci-dessous sur la console du gestionnaire de packages:
Install-Package Microsoft.AspNet.WebApi
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.
NOTE: ceci est juste une abréviation de cette réponse ci-dessus
Ouvrez la console du gestionnaire de paquets NuGet et lancez-la.
PM> Install-Package Microsoft.AspNet.WebApi
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à
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 }
);
}
}
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);
}
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";
}
}
}
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.
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;)