2. ASP.NET 5 & MVC 6 RC1
José M. Aguilar
• Microsoft MVP desde 2011
• Desarrollador & consultor independiente
• Autor y tutor de cursos online de MVC (CampusMVP)
• Autor de “SignalR programming in Microsoft ASP.NET”
(Microsoft Press)
• Contacto:
• Blog: www.variablenotfound.com
• Twitter: @jmaguilar
3. ASP.NET 5 & MVC 6 RC1
Qué vamos a ver
• Un poco de contexto
• Lo nuevo de ASP.NET 5
• Lo nuevo de MVC 6
5. ASP.NET 5 & MVC 6 RC1
¡Casi 15 años de ASP.NET!
Un poco de historia…
6. ASP.NET 5 & MVC 6 RC1
ASP.NET Web stack hoy
Sites
Web Forms Web Pages MVC
Services
Web API Signal R
ASP.NET 4.x
System.Web, aka “el monolito”
.NET Framework 4.x
Windows
7. ASP.NET 5 & MVC 6 RC1
¿Y si partimos de cero?
• Modularidad Solo lo que usamos
• Más productividad F5 en browser
• Mejor aprovechamiento del servidor
• Más rápido (muy rápido!)
• Reducción de memoria (90%)
• Cloud-ready by default
• Configuración, sesión, cache, file system
• Debugging/tracing/logging local&cloud
• Más control sobre la evolución
• Paquetes Nuget para features y framework
• Sin breaking changes por actualizaciones
• Actualizaciones rápidas (zero-day fixes)
• Libertad de editores y herramientas:
• Visual Studio, Sublime, Notepad, Code,
Editores en cloud…
• Command line
• Integración con 3rd party tools (npm,
bower, gulp…)
• Cross-platform
• Windows, Linux & Mac
• En desarrollo y explotación
• Open source con contribuciones
Microsoft Open Source
Microsoft Mac & Linux
8. ASP.NET 5 & MVC 6 RC1
ASP.NET 5 Web stack
Sites and services
MVC Web Pages
Realtime
SignalR
.NET Framework 4.x
Windows
.NET Core
Cross-platform
(Windows, Linux, Mac)
10. ASP.NET 5 & MVC 6 RC1
Novedades principales
• Actual: RC1. Licencia “go-live”
• RTM (prev) 1er trimestre 2016
• Estructura del proyecto:
• Nuevos archivos y carpetas
• R.I.P. Web.config & Global.asax
• Project.json
• Clase Startup
• Referencias a paquetes Nuget
• Pipeline y middlewares
• Inyección de dependencias
• Configuración
• Y mucho más:
logging, sesiones, cache, I18N, Kestrel/hosting,
Antiforgery, file system, CORS, Webhooks,
Identity, Node services, Web sockets, User
secrets, command line tools…
11. ASP.NET 5 & MVC 6 RC1
Demo: Estructura del proyecto
12. ASP.NET 5 & MVC 6 RC1
Proceso de peticiones: pipeline y middlewares
• Proceso de peticiones a través del pipeline de ASP.NET.
• Pipeline = “tubería”
Request
Response
• Ascienden las peticiones
• Descienden las respuestas
13. ASP.NET 5 & MVC 6 RC1
Pipeline y middlewares
• Middleware = “filtro”
• Observan peticiones y respuestas
• Pueden alterarlas
• Dejan pasar (o no) las peticiones
• Dejan pasar (o no) las respuestas
• ¡El orden importa!
Request
Response
Middleware
Middleware
Middleware
15. ASP.NET 5 & MVC 6 RC1
Pipeline y middlewares
• Añadimos solo los middlewares que necesitamos
• Aplicaciones reales varios middlewares
• ASP.NET proporciona los más comunes
Similar a lo que teníamos en ASP.NET <= 4.x: sesiones, seguridad, diagnóstico & control de errores,
globalización…
• Mecanismo extensible custom middlewares, comunidad
19. ASP.NET 5 & MVC 6 RC1
Novedades principales
• Actual: RC1. Licencia “go-live”
• RTM (prev) 1er trimestre 2016
• Construido sobre ASP.NET 5
(sin dependencias a System.Web)
• Los principios siguen intactos
• Casi todo lo que sabemos nos vale
• Principalmente compatible a nivel de
código
• Algunas cosas que desaparecen:
• Framework Web API
• Child actions
• Web forms view engine
• Bundles frameworks de frontend
• Características nuevas:
• Derivadas de la nueva infraestructura:
• Inyección de dependencias, configuration,
application start, logging…
• View components
• Tag helpers
• Y mucho más:
• POCO controllers, IActionResult, convenciones,
filtros asíncronos, flush parciales, vistas asíncronas,
object results…
20. ASP.NET 5 & MVC 6 RC1
Dependency injection en MVC
• La “D” de los principios SOLID Desacoplar componentes
• Por defecto se usa el dependency resolver de ASP.NET 5
• Puede usar contenedores externos (Ninject, Autofac, Unity, StructureMap…)
• Uso:
• Registramos dependencias en ConfigureServices() de Startup
• Consumimos desde componentes instanciables por el framework:
• Controladores
• Middlewares
• Filtros
• Vistas
• …
21. ASP.NET 5 & MVC 6 RC1
Demo Dependency injection
22. ASP.NET 5 & MVC 6 RC1
View components
• Objetivo: facilitar la construcción de elementos de vista con lógica reutilizables
• Escenarios de uso: widget de información del usuario, cesta de la compra,
últimas noticias, actividad reciente, etc.
• Sustituyen a los helpers Action() y RenderAction() y las child actions
• Mini-controlador especializado, con una única acción que retorna contenido
• Implementación:
• La clase que hereda de ViewComponent (en lugar de Controller)
• La vista que retorna (también puede ser JSON, un string…)
• La invocación desde las vistas/layouts con @Component.Invoke /InvokeAsync
24. ASP.NET 5 & MVC 6 RC1
Tag helpers
• Objetivo: vistas más sencillas de escribir y de leer
• Pueden sustituir a los HTML helpers
• Sintaxis declarativa:
• Procesado en servidor, antes de enviar el HTML al cliente
• Permite:
• Crear nuevas etiquetas
• “Potenciar” etiquetas existentes
• ASP.NET proporciona ~15 tag helpers
<a asp-action="about" asp-controller="home" asp-protocol="https">
Ir a About
</a>
25. ASP.NET 5 & MVC 6 RC1
Tag helpers: ejemplos
HTML Helpers (MVC <=5) Tag Helpers (MVC >= 6)
@Html.ActionLink("Enlace", "Index", "Home") <a asp-action="index" asp-controller=“home”>
Enlace
</a>
@Html.ActionLink("Edit", "edit", "products",
new { id=Model.Id },
new {
id="mylink",
@class="productlink",
style="font-weight: bold"
}
)
<a asp-controller="products" asp-action="edit"
asp-route-id="@Model.Id"
id="mylink" class="productlink"
style="font-weight: bold">Edit</a>
@using (Html.BeginForm("Create", "Customer",
FormMethod.Post,
new { id = "logoutForm",
@class = "navbar-right" }))
{
@Html.AntiForgeryToken()
@Html.LabelFor(model => model.Name)
@Html.TextBoxFor(model => model.Name)
... <!– Resto del formulario
}
<form asp-controller="Account" asp-action="LogOff"
method="post" id="logoutForm" class="navbar-right">
<label asp-for="Name"></label>
<input type="text" asp-for="Name">
... <!– Formulario
</form>
¡No son los
<asp:tag runat=“server”>
de Web Forms!
26. ASP.NET 5 & MVC 6 RC1
Demo tag helpers
• Algunos tag helpers básicos:
• <a>
• <environment>
• <link>
• <script>
• <cache>
• Tag helpers personalizados
• Más ejemplos: https://github.com/dpaquette/TagHelperSamples
27. ASP.NET 5 & MVC 6 RC1
Próximos pasos
• Instalar:
http://get.asp.net
• Leer:
https://docs.asp.net/
• Seguir de cerca:
http://github.com/aspnet
• Visitar mi blog
http://www.variablenotfound.com