Me encanta el hecho de que MVC6 de ASP.NET Core fusionó los dos patrones en uno porque a menudo la necesidad de apoyar tanto mundos.Si bien es cierto que se puede ajustar cualquier MVC estándar Controller
(y/o desarrollar sus propios ActionResult
clases) para actuar & se comportan igual que un ApiController
, que puede ser muy difícil de mantener y hacer la prueba: por encima de eso, teniendo controladores Los métodos que devuelven ActionResult
combinados con otros datos devueltos en bruto/serializados/IHttpActionResult
pueden ser muy confusos desde la perspectiva del desarrollador, especialmente si no está trabajando solo y necesita traer a otros desarrolladores a la velocidad con ese enfoque híbrido.
La mejor técnica que he utilizado hasta ahora para minimizar ese problema en las aplicaciones web ASP.NET que no son Core es importar (y configurar correctamente) el paquete de API web en la aplicación web MVC, para que pueda tener lo mejor de ambos mundos: Controllers
para Views, ApiControllers
para datos.
Con el fin de hacer eso, es necesario hacer lo siguiente:
- instalar los siguientes paquetes de API Web utilizando NuGet:
Microsoft.AspNet.WebApi.Core
y Microsoft.AspNet.WebApi.WebHost
.
- Agregue uno o más ApiControllers a su carpeta
/Controllers/
.
- Añadir los siguientes WebApiConfig.cs archivo a la carpeta
/App_Config/
:
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 }
);
}
}
Por último, tendrá que registrar la clase anterior a su inicio de la clase (ya sea o Startup.cs
Global.asax.cs
, dependiendo si está usando la plantilla de inicio de OWIN o no).
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);
// ...
}
Este enfoque - junto con sus pros y contras - se explica en the following post.
Importante: ASPNET Core ha "fusionado" 'ApiController' y' Controller', por lo que si está usando el .NET más nuevo ya no tiene que preocuparse por ApiController - https://docs.microsoft.com/es -us/aspnet/core/tutorials/first-web-api –
¡Contento que lo hicieron! Lo predije hace mucho tiempo por cierto http://prideparrot.com/blog/archive/2012/10/asp_net_mvc_vs_webapi – VJAI