J'adore le fait que le MVC6 d'ASP.NET Core a fusionné les deux modèles en un, car j'ai souvent besoin de prendre en charge les deux mondes. Bien qu'il soit vrai que vous pouvez modifier n'importe quel MVC standard Controller
(et / ou développer vos propres ActionResult
classes) pour agir et se comporter comme un an ApiController
, il peut être très difficile à maintenir et à tester: en plus de cela, avoir des méthodes de Contrôleurs retournant ActionResult
mélangées avec d'autres le retour de données brutes / sérialisées / IHttpActionResult
peut être très déroutant du point de vue du développeur, en particulier si vous ne travaillez pas seul et que vous avez besoin d'accélérer d'autres développeurs avec cette approche hybride.
La meilleure technique que j'ai trouvée jusqu'à présent pour minimiser ce problème dans les applications Web non Core ASP.NET consiste à importer (et à configurer correctement) le package d'API Web dans l'application Web basée sur MVC, afin que je puisse avoir le meilleur des deux. mondes: Controllers
pour les vues, ApiControllers
pour les données.
Pour ce faire, vous devez procéder comme suit:
- Installez les packages d'API Web suivants à l'aide de NuGet:
Microsoft.AspNet.WebApi.Core
et Microsoft.AspNet.WebApi.WebHost
.
- Ajoutez un ou plusieurs ApiControllers à votre
/Controllers/
dossier.
- Ajoutez le fichier WebApiConfig.cs suivant à 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 classe de démarrage (soit Startup.cs
ou Global.asax.cs
, selon que vous utilisez le modèle de démarrage OWIN ou non).
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 - avec ses avantages et ses inconvénients - est expliquée plus en détail dans cet article que j'ai écrit sur mon blog.
ApiController
etController
donc si vous utilisez le nouveau .NET, vous n'avez plus à vous soucier d'ApiController - docs.microsoft.com/en-us/aspnet/core/tutorials/first-web- api