Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 29 de octubre de 2013
ASP.NET MVC 5Hace poco pudimos vivir un día de esos en los que Microsoft publica nuevas versiones de todo. O casi: ASP.NET MVC 5, Web API 2, SignalR 2, Entity Framework 6, o Visual Studio 2013, entre otros. Muchas novedades que aprender, descubrir, probar… y sobre las que escribir, sin duda ;-)

ASP.NET MVC 5 es, quizás, el producto con menos cambios y novedades de todos los citados anteriormente. Ojo, esto no tiene por qué ser necesariamente malo: quiere decir que nuestro querido framework ha alcanzado ya un nivel de madurez importante y no necesita grandes cambios para seguir dándonos todo lo que necesitamos para crear aplicaciones web. Sin embargo, no puedo negar una cierta desazón ante la falta de esas novedades espectaculares que han venido acompañando entregas anteriores (¿recordáis cuando llegó Razor? ¡Uaaaaau!).

Pero antes que nada, deciros que ASP.NET MVC 5 completo (tooling y ensamblados) está disponible en estos momentos exclusivamente en Visual Studio 2013. Si utilizamos Visual Studio 2012 podemos descargar y utilizar los binarios usando Nuget, pero no habrá soporte a nivel de IDE hasta mediados de Noviembre, cuando se prevé que será lanzada una actualización del entorno.

Y dicho esto, vamos a comentar los cambios más destacados que acompañan a esta nueva versión.

One ASP.NET

Aunque no es algo exclusivo de MVC sino trasversal a todas las tecnologías de desarrollo basadas en ASP.NET, supone un cambio respecto a la forma en la que actualmente creamos los proyectos y vale la pena comentarlo.

La idea tras el concepto “One ASP.NET” es simple: se pretende unificar la experiencia de desarrollo en proyectos basados en ASP.NET. A diferencia de versiones anteriores, en Visual Studio ahora sólo tendremos disponible una opción a la hora de crear un proyecto: “ASP.NET Web Application”.

Nuevo proyecto: ASP.NET Web Application
A partir de ahí, podremos decidir qué tecnología o tecnologías necesitamos incluir en él (Webforms, WebAPI, MVC, SPA…) y configuramos de forma unificada sus características básicas, como la autenticación. Es decir, creamos un proyecto y, de forma modular, iremos añadiendo a él los frameworks que utilizaremos:

Configuración de proyecto ASP.NET
Ya durante el desarrollo también es posible añadir componentes, frameworks y dependencias que requieren utilizando el nuevo sistema de scaffolding de Visual Studio 2013.

Si queréis leer más sobre esta nueva forma de crear proyectos, tenéis un buen post de José Manuel Alarcón al respecto: “Nuevos proyectos unificados de aplicaciones ASP.NET en Visual Studio 2013”.

ASP.NET Identity

ASP.NET Identity es un componente externo a ASP.NET MVC en sí, compartido y utilizable por todas las tecnologías englobadas bajo este paraguas “One ASP.NET”, que pretende simplificar la construcción de aplicaciones con requisitos de autenticación y autorización. Se trata, por tanto, de un elemento destinado a sacar de la pista al clásico Membership de ASP.NET, e incluso al posterior SimpleMembership que acompaña a MVC 4, y que tanto hemos sufrido durante años. A ver si esta es la definitiva ;-)

Para aprovechar estas características en distintas plataformas, el sistema de identidad hace uso de la infraestructura OWIN, de la que ya hemos hablado bastante por aquí, para proporcionar las funcionalidades básicas de autenticación usando distintas técnicas (cookies, active directory, OAuth…).

Esto tiene suficiente entidad como para dedicarle un post independiente, por lo que simplemente diremos que ahora todo el sistema de membresía se aleja de componentes monolíticos y adopta una arquitectura mucho más flexible y limpia, mucho más fácilmente personalizable e integrable en nuestros sistemas. Por ejemplo, ya no encontraremos accesos directos a base de datos, ni tablas de usuarios desvinculadas de nuestros modelos, ni otras soluciones de magia negra: sólo clases de gestión, contextos de Entity Framework y entidades de datos que podemos extender con suma facilidad.

Obviamente, y como consecuencia de todo lo anterior, ha cambiado el código que encontramos inicialmente en el controlador AccountController, así como las clases del modelo relativas a la autenticación que en la versión anterior estaban basadas en SimpleMembership.

Funcionalmente en el proyecto creado inicialmente encontraremos lo mismo que en las versiones anteriores: autenticación local, así como usando proveedores externos (Facebook, Google, Twitter…), registro de usuarios, etc.

Plantillas de página basadas en Bootstrap 3

BootstrapEste framework para la construcción de webs responsivas está de moda, y es que ciertamente nos pone muy fácil la creación de sitios web adaptables a distintas resoluciones y dispositivos (o sea, los famosos “responsive designs”).

En ASP.NET MVC 5 (y Webforms), tanto las vistas incluidas en la plantilla de proyectos como aquellas que se crean ya durante el desarrollo, generan por defecto código basado en este marco de trabajo. Por supuesto no se trata de una imposición, sino de una sugerencia ;-) Siempre podemos modificar el layout y vistas, eliminar el código específico de Bootstrap, y maquetar a nuestro antojo las vistas.

Pero los que aún no hayáis visto Bootstrap, dadle una oportunidad, que os aseguro que mola bastante ;-)

Authentication filters

Aunque suene algo confuso, ASP.NET MVC 5 incluye los nuevos filtros de autenticación que complementan al tradicional [Authorize] disponible desde el principio de los tiempos, con la idea de separar autenticación de autorización. El primero de ellos debe encargarse de comprobar si el usuario es válido y asociarlo a la petición, mientras que el segundo sólo debe encargarse de comprobar cuándo este dispone de autorización para ejecutar una acción.

En la práctica, los authentication filters son filtros que implementan el interfaz IAuthenticationFilter, y son ejecutados por MVC antes que el resto, dando la oportunidad de examinar el contexto de la petición y, en su caso, establecer el Principal asociado a la misma. También se ejecutan después del resto de filtros de autenticación y autorización, permitiendo tomar el control para, por ejemplo, redirigir al usuario a una página determinada o a un proveedor externo.

Como en el resto de ocasiones, estos filtros pueden ser introducidos de forma global, a nivel de controlador, o específicamente para acciones concretas.

Todavía no hay una documentación especialmente buena ni demasiados casos de uso publicados, pero podéis leer algo más sobre ello en este artículo de Visual Studio Magazine.

Filter overrides

En ASP.NET MVC 5 se han introducido nuevos filtros que permiten indicar qué filtros no deben ser ejecutados en los controladores o acciones donde se especifican. De esta forma, podemos definir filtros a nivel global o de controlador, e indicar en la acción que dicho filtro no debe ejecutarse.

Por ejemplo, el siguiente filtro personalizado [Log] se ejecutaría en todas las llamadas a acciones de TestController, excepto en Index(). El filtro [OverrideLog] implementaría el nuevo interfaz IOverrideFilter e indicaría el tipo de filtro a ignorar.
[Log]
public class TestController : Controller
{
    [OverrideLog]
    public ActionResult Index()
    {
            
    }
        
    // Other actions
}
A priori no es algo que vayamos a utilizar muy a menudo, sólo en esos casos raros en los que queremos evitar la ejecución de un filtro en un escenario determinado.

Routing basado en atributos

Hay a quien no le convencía la idea de tener las rutas definidas de forma independiente a las acciones, en el tradicional RouteConfig.cs, y usaban alternativas como el proyecto Attribute routing, que permitían definirlas utilizando atributos sobre las propias acciones y controladores. Pues bien, esta idea ha calado y está ya integrada en el framework.

A partir de ahora podemos activar el rutado a través de atributos en el arranque de la aplicación de la siguiente forma:
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapMvcAttributeRoutes();
    ...
}

Hecho esto, podemos utilizar atributos como [Route], [RoutePreffix] o [RouteArea] para definir en acciones y controladores las rutas con las que podemos acceder a ellos, por ejemplo así:
[RoutePrefix("invoices")] 
public class InvoicesController : Controller
{ 
    // GET /invoices
    [Route] 
    public ActionResult Index() { ... } 

    // GET /invoices/5 
    [Route("{id}")] 
    public ActionResult Show(int id) { ... } 

    // GET /invoices/edit/5 
    [Route("edit/{id}")] 
    public ActionResult Edit(int id) { ... } 
}
Podéis leer más sobre el tema en este artículo: Attribute Routing in ASP.NET MVC 5.

¡Y esto es todo!

Como hemos visto, las novedades más visibles que vamos a encontrar en MVC 5 son más bien transversales a distintas tecnologías ASP.NET, como la unificación de proyectos, el nuevo sistema de identidad, o la entrada de Bootstrap como marco sugerido “oficialmente” para la construcción del frontend. Estrictamente hablando, exclusivas de ASP.NET MVC sólo tenemos authentication filters, los filter overrides y la posibilidad de utilizar atributos para definir las rutas…

¿A que sabe a poco? ;-)

Publicado en Variable not found.

7 Comentarios:

Bernabé dijo...

Afortunadamente esta nueva versión ofrece pocos cambios y se puede aflojar un poco el ritmo de estudio :-D

josé M. Aguilar dijo...

Sí, la verdad es que al menos nos deja un poco de tiempo para respirar :)

Gracias por comentar!

Luis Sáchez dijo...

Hola!

Pocos cambios, pero en mi opinión por ejemplo el uso de OWIN para la autenticación es algo bastante interesante y que merece destacar sobre los cambios introducidos :)

josé M. Aguilar dijo...

Hola!

Sin duda es muy interesante. Estamos asistiendo al principio de la orientación hacia Owin de muchos productos y componentes :)

Saludos & gracias por comentar.

Unknown dijo...

Es muy interesante leer esto, aun que, sean unos meses despues del post, pero sin duda es enriquecedor. Espero tener nuevamente una oportunidad de participar en algun curso tuyo en campusmvp sobre estas tecnologias. Saludos. :)

josé M. Aguilar dijo...

Muchas gracias, Carlos :)

Saludos.

Anónimo dijo...

Muy buen artículo!
Me ha parecido muy interesante todo lo referente a Identity en mvc 5 y la membresía de antiguas versiones mvc.
Ha sido y es de gran utilidad.
Muchas gracias.