ASP.NET 5 & MVC 6

ASP.NET 5 & MVC 6
Release Candidate 1
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
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
ASP.NET 5 & MVC 6 RC1
El Contexto
De dónde venimos, a dónde vamos
Un poco de historia…
¡Casi 15 años de ASP.NET!
ASP.NET 5 & MVC 6 RC1
ASP.NET Web stack hoy
Sites
Web Forms
Services
Web Pages
MVC
Web API
ASP.NET 4.x
System.Web, aka “el monolito”
.NET Framework 4.x
Windows
ASP.NET 5 & MVC 6 RC1
Signal R
¿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)
ASP.NET 5 & MVC 6 RC1
• 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
Microsoft
Mac & Linux
• Open source con contribuciones
Microsoft
Open Source
ASP.NET 5 Web stack
Sites and services
MVC
Web Pages
Realtime
SignalR
.NET Framework 4.x
.NET Core
Windows
Cross-platform
ASP.NET 5 & MVC 6 RC1
(Windows, Linux, Mac)
ASP.NET 5 RC1
Principales novedades
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
ASP.NET 5 & MVC 6 RC1
• 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…
Demo: Estructura del proyecto
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
ASP.NET 5 & MVC 6 RC1
• Ascienden las peticiones
• Descienden las respuestas
Pipeline y middlewares
• Middleware = “filtro”
Middleware
Middleware
Request
Middleware
Response
ASP.NET 5 & MVC 6 RC1
•
•
•
•
•
Observan peticiones y respuestas
Pueden alterarlas
Dejan pasar (o no) las peticiones
Dejan pasar (o no) las respuestas
¡El orden importa!
Demo: middleware “Hello world!”
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
ASP.NET 5 & MVC 6 RC1
Demo: middlewares
ASP.NET 5 & MVC 6 RC1
¿Dónde encajan los frameworks?
My
Application
ASP.NET MVC
framework
Auth
middleware
Static Files
middleware
Error Handling
middleware
Request
Response
ASP.NET 5 & MVC 6 RC1
IIS Platform
Handler
Los frameworks también añaden
middlewares al pipeline:
app.UseMvc();
MVC 6 RC1
Principales novedades
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…
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
…
ASP.NET 5 & MVC 6 RC1
Demo Dependency injection
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
ASP.NET 5 & MVC 6 RC1
Demo View component
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:
<a asp-action="about" asp-controller="home" asp-protocol="https">
Ir a About
</a>
• Procesado en servidor, antes de enviar el HTML al cliente
• Permite:
• Crear nuevas etiquetas
• “Potenciar” etiquetas existentes
• ASP.NET proporciona ~15 tag helpers
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">
ASP.NET 5 & MVC 6 RC1
<label asp-for="Name"></label>
<input type="text" asp-for="Name">
... <!– Formulario 
</form>
¡No son los
<asp:tag runat=“server”>
de Web Forms!
Demo tag helpers
• Algunos tag helpers básicos:
•
•
•
•
•
<a>
<environment>
<link>
<script>
<cache>
• Tag helpers personalizados
• Más ejemplos: https://github.com/dpaquette/TagHelperSamples
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
ASP.NET 5 & MVC 6 RC1
ASP.NET 5 & MVC 6 RC1
That’s all, folks!
ASP.NET 5 & MVC 6 RC1
http://wallpapercave.com/w/LCTg3vr