J'apprécie le fait que MVC6 d'ASP.NET Core ait fusionné les deux modèles en un seul, car j'ai souvent besoin de prendre en charge les deux mondes. S'il est vrai que vous pouvez modifier n'importe quel modèle MVC standard Controller
(et/ou développez votre propre ActionResult
) pour agir et se comporter exactement comme une ApiController
il peut être très difficile de le maintenir et de le tester. Contrôleurs les méthodes retournant ActionResult
mélangé avec d'autres retournant des données brutes/sérialisées/ IHttpActionResult
Les données peuvent être très déroutantes du point de vue du développeur, surtout si vous ne travaillez pas seul et que vous devez amener d'autres développeurs à adopter cette approche hybride.
La meilleure technique que j'ai trouvée jusqu'à présent pour minimiser ce problème dans les applications Web ASP.NET non-Core est d'importer (et de configurer correctement) le paquet API Web dans l'application Web basée sur MVC, afin de pouvoir bénéficier du meilleur des deux mondes : Controllers
pour les vues, ApiControllers
pour les données.
Pour ce faire, vous devez procéder comme suit :
- Installez les paquets API Web suivants à l'aide de NuGet :
Microsoft.AspNet.WebApi.Core
y Microsoft.AspNet.WebApi.WebHost
.
- Ajoutez un ou plusieurs ApiControllers à vos
/Controllers/
carpeta.
- Ajoutez ce qui suit WebApiConfig.cs à votre
/App_Config/
dossier :
using System.Web.Http;
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 }
);
}
}
Enfin, vous devrez enregistrer la classe ci-dessus dans votre système de gestion de l'information. Démarrage (soit Startup.cs
o Global.asax.cs
(selon que vous utilisez ou non le modèle OWIN Startup).
Startup.cs
public void Configuration(IAppBuilder app)
{
// Register Web API routing support before anything else
GlobalConfiguration.Configure(WebApiConfig.Register);
// The rest of your file goes there
// ...
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ConfigureAuth(app);
// ...
}
Global.asax.cs
protected void Application_Start()
{
// Register Web API routing support before anything else
GlobalConfiguration.Configure(WebApiConfig.Register);
// The rest of your file goes there
// ...
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// ...
}
Cette approche - ainsi que ses avantages et ses inconvénients - est expliquée plus en détail dans le document suivant ce poste J'ai écrit sur mon blog.
31 votes
Important : ASPNET Core a 'fusionné'.
ApiController
yController
donc si vous utilisez la nouvelle version de .NET, vous n'avez plus besoin de vous soucier d'ApiController. learn.microsoft.com/fr/aspnet/core/tutorials/first-web-api4 votes
Je suis content qu'ils l'aient fait ! Je l'avais prédit depuis longtemps d'ailleurs prideparrot.com/blog/archive/2012/10/asp_net_mvc_vs_webapi
2 votes
" Mark et Ted sont de grands amis. Ils remplissent généralement leur table à dîner de discussions intéressantes surtout techniques ! " Personne ne s'attend à une bande dessinée très technique. ;^)