SlideShare una empresa de Scribd logo
24.01.2017
ASP.NET MVC
Core
{
“title”: “Developer”,
“awards”: [“mvp”],
“twitter”: “@eiximenis”,
“blog”: “http://geeks.ms/etomas”
“work” : {
“name”: “Plain Concepts”,
“office”: “BCN”,
“url”: “http://www.plainconcepts.com”
}
}
Eduard Tomàs
#NETCore2017 2
• MVC Core mantiene el mismo modelo de desarrollo que MVC5
• Vistas (Razor), Controladores, Acciones, Resultados de acción
• Convenciones
• Enrutamiento (tabla de rutas + enrutamiento por atributos)
• Si sabes MVC5 el salto inicial a MVC Core no es muy complejo
• Misma filosofía
Lo que es (casi) igual
#NETCore2017 3
(COMPARÁNDOLO CON MVC5, CLARO)
• Razor Tag Helpers
• Razor View Components
• Unificación MVC – WebApi
• Convenciones personalizadas
Algunas cosas que son distintas
#NETCore2017 4
(Y LO QUE VEREMOS HOY)
• MVC Core se alinea con las tendencias front modernas
• Directorio wwwroot donde se despliega la app
• Ciclo de trabajo usando npm, gulp, bower, …
• Visual Studio 2015/2017 tiene gran soporte para esas herramientas
• Fácil uso con herramientas externas
La gran diferencia
#NETCore2017 5
(Y LO QUE DEBERÍAS IR VIENDO INCLUSO EN MVC5)
• Muchas de las diferencias son de ASP.NET Core, no de MVC Core:
• Seguridad
• Logging
• Gestión de errores
• Configuración
• …
MVC Core es un middleware core
#NETCore2017 6
(¡SI CONOCES OWIN/KATANA ESTÁS DE SUERTE!)
Los Tag Helpers son etiquetas Razor
personalizadas que permiten encapsular
código Razor
Parecidos a los helpers tradicionales, pero
más potentes
Razor TAG
HELPERS
#NETCore2017 7
INTEGRANDO HELPERS CON MÁS FACILIDAD
Demo: Creando
un Tag Helper
8
• Mayor integración con herramientas de diseño
• Heredan de la clase TagHelper
• Se pueden redefinir etiquetas HTML existentes
• Una etiqueta HTML puede ser o no un Tag Helper en función de sus
atributos
• Tienen conocimiento de su contenido
• Directiva @addTagHelper para importarlos
Razor Tag Helpers
#NETCore2017 9
(LAS CLAVES)
Formularios más claros
#NETCore2017 10
YA NO MÁS @HTML…. (CASI)
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-
horizontal">
<h4>Use a local account to log in.</h4>
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Email" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Password" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
</div>
<p>
<a asp-action="ForgotPassword">Forgot your password?</a>
</p>
</form>
Demo: Tag
Helper repeater
11
Los view components son el equivalente a las
acciones hijas de MVC5
Invocadas desde Razor
Muestran UI parcial con lógica de negocio
VIEW
COMPONENTS
#NETCore2017 12
YA NO MÁS ACCIONES HIJAS
• Heredar de ViewComponent
• Definir método Invoke (o InvokeAsync) que retorna IViewComponentResult
• Parámetros libres (método Invoke no es override).
• Vista Default.cshml en /Views/Shared/Components/<Componente>
• Invocar desde Razor
• @Component.Invoke(“nombre”, new {<parámetros>})
View Components
#NETCore2017 13
(LAS CUATRO COSAS A SABER)
• Bonus 1.1: Invocar view component como tag helper
• <vc:nombre attr=“value” …></vc:nombre>
Demo: View
Components
14
WebApi desaparece y se integra en MVC
Core
No más ApiController ni clases duplicadas
El model binding de MVC Core es una
mezcla del de MVC5 y WebApi 2
MVC Y WEBAPI
UNIFICADOS
#NETCore2017 15
¡NO MÁS WEBAPI Y MVC!
1. Si el controlador es un controlador de API:
1. Un solo parámetro complejo con [FromBody]
2. N parámetros simples que irán en URL
2. Si el controlador es un controlador de Web:
1. Tantos parámetros simples o complejos como se quiera
2. No usar [FromBody]
Model binding unificado
#NETCore2017 16
(LAS REGLAS PARA NEWBIES)
Demo: Model
Binding
17
• El content-type de la petición determina el model binding a usar
• Usar application/x-www-form-urlencoded usa model binding a lo MVC
• Usar application/json o text/xml usa model binding a lo WebApi
• Otros content-types usarán el model binding especificado por el
desarrollador
Model binding unificado
#NETCore2017 18
(LAS CLAVES AVANZADAS)
• Parámetros son leídos por value providers
• Parámetros son enlazados por model binders
• Un mismo parámetro puede ser enlazado múltiples veces
• Un mismo parámetro puede ser enlazado desde URL o desde el cuerpo de
la petición
• Se puede enlazar más de un parámetro desde la URL
• Se puede enlazar más de un parámetro desde el cuerpo de la petición
Model binding a lo MVC
#NETCore2017 19
(LO QUE DEBEMOS SABER)
• Parámetros de URL son leídos por value providers
• Parámetros de URL son enlazados por model binders
• Se puede enlazar más de un parámetro desde la URL
• Un mismo parámetro de URL puede ser enlazado varias veces
• Solo un parámetro puede ser enlazado desde el cuerpo de la petición
• Leído y enlazado a partir de un InputFormatter
• El parámetro enlazado a partir del cuerpo de la petición debe estar
marcado con [FromBody]
Model binding a lo WebApi
#NETCore2017 20
(LO QUE DEBEMOS SABER)
Demo: Custom
InputFormatter
21
• Integrada en aquellos action results que heredan de ObjectResult
• Usa la cabecera Accept de la petición
• Se puede forzar un formato con [Produces]
• La respuesta es generada por un OutputFormatter
• Podemos crear OutputFormatters nuevos para dar soporte a nuevos
formatos
Negociación de contenido
#NETCore2017 22
(O COMO DARLE AL CLIENTE LO QUE PIDE)
• Si no hay un OutputFormatter para el tipo especificado el fallback por
defecto es JSON
• Se puede añadir el HttpNotAcceptableOutputFormatter que devolverá un
406
Negociación de contenido
#NETCore2017 23
(UN PAR DE COSILLAS MÁS…)
services.AddMvc().Configure<MvcOptions>(options =>
{
options.OutputFormatters.Insert(0, new HttpNotAcceptableOutputFormatter());
}
• En MVC5 / WebApi2 si se devolvía un null ese era serializado
Un poco más restful
#NETCore2017 24
(DOS DETALLITOS…)
• En MVC Core eso devuelve un 204 (No Content)
• Las cadenas son devueltas usando text/plain
• Podemos modificar las convenciones por defecto y agregar
convenciones nuevas
• ¿Es buena idea modificar las convenciones? …
• Habilita escenarios interesantes
• Implementar IApplicationModelConvention
• Podemos agregar restricciones implementando
IActionConstraintMetadata
Convenciones propias
#NETCore2017 25
(UN GRAN PODER CONLLEVA UNA GRAN RESPONSABILIDAD)
Demo: Convenciones
propias
26
• Empieza ya a usar npm, gulp y similares.
• Olvida los bundles de MVC
• Usa los IHttpResult de WebApi2.
• Olvida el enrutado por verbo de WebApi.
• Usa enrutado por atributos en WebApi.
• Usa WebApi en modo OWIN.
• Usa inyección de dependencias
• Evita devolver datos desde MVC5. Usa WebApi.
De MVC5 a MVC Core
#NETCore2017 27
(CONSEJOS BÁSICOS PARA AYUDARTE A DAR EL SALTO)
• Sustituye Razor Helpers por Tag Helpers
• Sustituye acciones hijas por View Components
• Elimina [FromUri] en ApiControllers y verifica los bindings
• Y por supuesto: Valora si vale la pena migrar. ¡Recuerda todo lo que no
es realmente MVC Core pero sí ASP.NET Core!
De MVC5 a MVC Core
#NETCore2017 28
(CONSEJOS BÁSICOS PARA AYUDARTE A DAR EL SALTO)
¡GRACIAS!
@eiximenis
etomas@plainconcepts.com
www.plainconcepts.com
MADRID
Paseo de la Castellana 163, 10º
28046 Madrid. España
T. (+34) 91 5346 836
BILBAO
Nervión 3 , 6º
48001 Bilbao. España
T. (+34) 94 6008 168
BARCELONA
Av. Josep Tarradellas 10, 6º 1ª
08029 Barcelona. España
T. (+34) 93 3607 114
SEVILLA
Avenida de la innovación s/n
Edificio Renta Sevilla, 3º A
41020 Sevilla. España
DUBAI
Dubai Internet City. Building 1
73030 Dubai. EAU
T. (+971) 4 551 6653
LONDON
Impact Hub Kings Cross
24B York Way, N1 9AB
London. UK
SEATTLE
1511, Third Ave
Seattle WA 98101. USA
T. (+1) 206 708 1285

Más contenido relacionado

PPTX
ASP.NET 5 & MVC 6 (RC1)
PPTX
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
PPTX
Kubernetes: Do's, don'ts and why's
PPTX
Containers en .NET (Dot Net 2018 - Spain)
PPTX
Introducción a Asp.Net Mvc
PPTX
ASP.NET MVC Workshop Día 1
PPTX
Security in MVC Core by Hugo Biarge
PPTX
Plainconcepts .Net Core Event - Real Time Applications
ASP.NET 5 & MVC 6 (RC1)
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
Kubernetes: Do's, don'ts and why's
Containers en .NET (Dot Net 2018 - Spain)
Introducción a Asp.Net Mvc
ASP.NET MVC Workshop Día 1
Security in MVC Core by Hugo Biarge
Plainconcepts .Net Core Event - Real Time Applications

La actualidad más candente (19)

PPTX
Docker y todo eso... más o menos
PPTX
ASP.NET MVC Workshop Día 3
PPTX
Esos contenedores, ¡a producción! (Commit Conf 2018)
PPTX
Azure 360º para Desarrolaldores
KEY
SpringIO 2012 Madrid-Escalabilidad con Grails
PDF
[El comercio]php zend framework (speech)
PPTX
NodeJS
 
PDF
Webinar Arquitectura de Microservicios
PDF
Introduccion a Elastic Beanstalk AWS Roadshow Bogota Mexico
PDF
SOA Latam Workshop: Comparison Dropwizard, ratpack & Spring Boot
PPTX
Azure Bootcamp 2017 - Azure functions
PPTX
Asp.Net Core 1.0 Deep Dive
PPTX
Web matrix razor_aspnetmvc_finalv2_techdays2010
PDF
Presentación Spring Boot en Autentia
PDF
Backbeam
PPTX
Web matrix 2_desarrollo_web_gratis_simple_abierto_todo_en_uno
ODP
Creando APIs REST con Spring Boot
PPTX
.Net Core Real time App on My Rasperry PI - Codemotion 2017 talk
KEY
Grails, opción real y escalable para sitios web de alta carga
Docker y todo eso... más o menos
ASP.NET MVC Workshop Día 3
Esos contenedores, ¡a producción! (Commit Conf 2018)
Azure 360º para Desarrolaldores
SpringIO 2012 Madrid-Escalabilidad con Grails
[El comercio]php zend framework (speech)
NodeJS
 
Webinar Arquitectura de Microservicios
Introduccion a Elastic Beanstalk AWS Roadshow Bogota Mexico
SOA Latam Workshop: Comparison Dropwizard, ratpack & Spring Boot
Azure Bootcamp 2017 - Azure functions
Asp.Net Core 1.0 Deep Dive
Web matrix razor_aspnetmvc_finalv2_techdays2010
Presentación Spring Boot en Autentia
Backbeam
Web matrix 2_desarrollo_web_gratis_simple_abierto_todo_en_uno
Creando APIs REST con Spring Boot
.Net Core Real time App on My Rasperry PI - Codemotion 2017 talk
Grails, opción real y escalable para sitios web de alta carga
Publicidad

Destacado (20)

PPTX
Puzles C#
PDF
5 to reportaje
PDF
Functional Reactive Programming
PDF
The algebra of library design
PPTX
Prism Navigation
PDF
DotNetSpain2015: Extendiendo Visual Studio Online a través de su API
PPTX
Models
PDF
ASP.NET MVC The Begining
PPTX
Una visión multiplataforma con aspnet v next
PDF
Thiet ke co so du lieu
PPTX
Azure functions
PDF
Functional Reactive Programming / Compositional Event Systems
PDF
What is Reactive programming?
PPTX
DotNet MVC and webpack + Babel + react
PPTX
02 - [ASP.NET Core] ASP.NET Core MVC
PDF
Microservices: Architecture for the Real-time Organization
PPTX
Introduction to .NET Core
PDF
Hướng dẫn cài đặt windows server 2008 cơ bản cho người mới bắt đầu.
PPTX
Getting Started with ASP.net Core 1.0
PDF
Bài 4: Triển khai Active Directory: Quản trị nhóm - Giáo trình FPT
Puzles C#
5 to reportaje
Functional Reactive Programming
The algebra of library design
Prism Navigation
DotNetSpain2015: Extendiendo Visual Studio Online a través de su API
Models
ASP.NET MVC The Begining
Una visión multiplataforma con aspnet v next
Thiet ke co so du lieu
Azure functions
Functional Reactive Programming / Compositional Event Systems
What is Reactive programming?
DotNet MVC and webpack + Babel + react
02 - [ASP.NET Core] ASP.NET Core MVC
Microservices: Architecture for the Real-time Organization
Introduction to .NET Core
Hướng dẫn cài đặt windows server 2008 cơ bản cho người mới bắt đầu.
Getting Started with ASP.net Core 1.0
Bài 4: Triển khai Active Directory: Quản trị nhóm - Giáo trình FPT
Publicidad

Similar a ASP.NET MVC Core (20)

PPTX
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
PPTX
Novedades de ASP.NET MVC6
PPTX
5-Unidad 2: Diseño de Vista-2.2 Para Web
PPTX
Construyendo tu ecosistema de desarrollo web
DOCX
PDF
Taller mvc.net 5
PDF
ASP.NET MVC - Introducción a ASP.NET MVC
PPTX
Desarrollo de Aplicaciones Web con ASP.NET MVC5
PPTX
Introducción a ASPNET vNext
PPTX
ASP.NET MVC
PPTX
Mvc4 Intro
PPTX
Asp.Net Core fundamentals - Plain Concepts Web Day Madrid
PPTX
Plain concepts webday- Carlos Landeras
PPTX
5-Unidad 2: Diseños de Vista-2.2 Para Web
PPTX
Desarrollo Web con ASP.NET MVC
PPTX
Todomir
PPTX
MVC & ASP.NET (Spanish)
PPTX
Introducción a ASP.NET Web API
PPTX
ASP.NET MVC (2011)
PPTX
[Code Camp 2009] ASP.NET MVC a full (Matías Juan Rubí + Jonathan Solarz)
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
Novedades de ASP.NET MVC6
5-Unidad 2: Diseño de Vista-2.2 Para Web
Construyendo tu ecosistema de desarrollo web
Taller mvc.net 5
ASP.NET MVC - Introducción a ASP.NET MVC
Desarrollo de Aplicaciones Web con ASP.NET MVC5
Introducción a ASPNET vNext
ASP.NET MVC
Mvc4 Intro
Asp.Net Core fundamentals - Plain Concepts Web Day Madrid
Plain concepts webday- Carlos Landeras
5-Unidad 2: Diseños de Vista-2.2 Para Web
Desarrollo Web con ASP.NET MVC
Todomir
MVC & ASP.NET (Spanish)
Introducción a ASP.NET Web API
ASP.NET MVC (2011)
[Code Camp 2009] ASP.NET MVC a full (Matías Juan Rubí + Jonathan Solarz)

Más de Eduard Tomàs (20)

PPTX
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
PPTX
Escalando workloads serverless en Kubernetes con Keda
PPTX
C#9 - Más C# que nunca
PPTX
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
PPTX
Keda o como convertir Kubernetess en Serverless
PPTX
.NET Memoria y Rendimiento
PPTX
Codemotion 2015 - Bienvenido de nuevo c++
PPTX
El "peor" lenguaje del mundo
PPTX
Containerize a netcore application with aks
PPTX
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
PPTX
Aplicaciones de consola fáciles? Más quisieramos
PPTX
Serverless with Azure Functions and CosmosDb
PPTX
Microservices: Yes or not?
PPTX
React native - Unleash the power of your device
PPTX
JavaScript in 2016 (Codemotion Rome)
PPTX
React native - t3chfest 2016
PPTX
React, Flux y React native
PPTX
JavaScript - HTML5 - IndexedDb
PPTX
Winobjc - Windows Bridge for iOS
PPTX
EcmaScript unchained
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
Escalando workloads serverless en Kubernetes con Keda
C#9 - Más C# que nunca
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
Keda o como convertir Kubernetess en Serverless
.NET Memoria y Rendimiento
Codemotion 2015 - Bienvenido de nuevo c++
El "peor" lenguaje del mundo
Containerize a netcore application with aks
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Aplicaciones de consola fáciles? Más quisieramos
Serverless with Azure Functions and CosmosDb
Microservices: Yes or not?
React native - Unleash the power of your device
JavaScript in 2016 (Codemotion Rome)
React native - t3chfest 2016
React, Flux y React native
JavaScript - HTML5 - IndexedDb
Winobjc - Windows Bridge for iOS
EcmaScript unchained

Último (20)

PDF
clase auditoria informatica 2025.........
PPTX
Presentación de Redes de Datos modelo osi
PDF
Maste clas de estructura metálica y arquitectura
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PDF
Influencia-del-uso-de-redes-sociales.pdf
PDF
capacitación de aire acondicionado Bgh r 410
PPTX
Propuesta BKP servidores con Acronis1.pptx
PDF
Documental Beyond the Code (Dossier Presentación - 2.0)
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PPTX
El uso de las TIC en la vida cotidiana..
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
Ronmy José Cañas Zambrano - Potenciando la tecnología en Venezuela.pdf
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PPTX
modulo seguimiento 1 para iniciantes del
clase auditoria informatica 2025.........
Presentación de Redes de Datos modelo osi
Maste clas de estructura metálica y arquitectura
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
Influencia-del-uso-de-redes-sociales.pdf
capacitación de aire acondicionado Bgh r 410
Propuesta BKP servidores con Acronis1.pptx
Documental Beyond the Code (Dossier Presentación - 2.0)
CyberOps Associate - Cisco Networking Academy
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
El uso de las TIC en la vida cotidiana..
Presentacion de Alba Curso Auditores Internos ISO 19011
historia_web de la creacion de un navegador_presentacion.pptx
Zarate Quispe Alex aldayir aplicaciones de internet .docx
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Ronmy José Cañas Zambrano - Potenciando la tecnología en Venezuela.pdf
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
modulo seguimiento 1 para iniciantes del

ASP.NET MVC Core

  • 2. { “title”: “Developer”, “awards”: [“mvp”], “twitter”: “@eiximenis”, “blog”: “http://geeks.ms/etomas” “work” : { “name”: “Plain Concepts”, “office”: “BCN”, “url”: “http://www.plainconcepts.com” } } Eduard Tomàs #NETCore2017 2
  • 3. • MVC Core mantiene el mismo modelo de desarrollo que MVC5 • Vistas (Razor), Controladores, Acciones, Resultados de acción • Convenciones • Enrutamiento (tabla de rutas + enrutamiento por atributos) • Si sabes MVC5 el salto inicial a MVC Core no es muy complejo • Misma filosofía Lo que es (casi) igual #NETCore2017 3 (COMPARÁNDOLO CON MVC5, CLARO)
  • 4. • Razor Tag Helpers • Razor View Components • Unificación MVC – WebApi • Convenciones personalizadas Algunas cosas que son distintas #NETCore2017 4 (Y LO QUE VEREMOS HOY)
  • 5. • MVC Core se alinea con las tendencias front modernas • Directorio wwwroot donde se despliega la app • Ciclo de trabajo usando npm, gulp, bower, … • Visual Studio 2015/2017 tiene gran soporte para esas herramientas • Fácil uso con herramientas externas La gran diferencia #NETCore2017 5 (Y LO QUE DEBERÍAS IR VIENDO INCLUSO EN MVC5)
  • 6. • Muchas de las diferencias son de ASP.NET Core, no de MVC Core: • Seguridad • Logging • Gestión de errores • Configuración • … MVC Core es un middleware core #NETCore2017 6 (¡SI CONOCES OWIN/KATANA ESTÁS DE SUERTE!)
  • 7. Los Tag Helpers son etiquetas Razor personalizadas que permiten encapsular código Razor Parecidos a los helpers tradicionales, pero más potentes Razor TAG HELPERS #NETCore2017 7 INTEGRANDO HELPERS CON MÁS FACILIDAD
  • 9. • Mayor integración con herramientas de diseño • Heredan de la clase TagHelper • Se pueden redefinir etiquetas HTML existentes • Una etiqueta HTML puede ser o no un Tag Helper en función de sus atributos • Tienen conocimiento de su contenido • Directiva @addTagHelper para importarlos Razor Tag Helpers #NETCore2017 9 (LAS CLAVES)
  • 10. Formularios más claros #NETCore2017 10 YA NO MÁS @HTML…. (CASI) <form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form- horizontal"> <h4>Use a local account to log in.</h4> <div asp-validation-summary="All" class="text-danger"></div> <div class="form-group"> <label asp-for="Email" class="col-md-2 control-label"></label> <div class="col-md-10"> <input asp-for="Email" class="form-control" /> <span asp-validation-for="Email" class="text-danger"></span> </div> </div> <div class="form-group"> <label asp-for="Password" class="col-md-2 control-label"></label> <div class="col-md-10"> <input asp-for="Password" class="form-control" /> <span asp-validation-for="Password" class="text-danger"></span> </div> </div> <p> <a asp-action="ForgotPassword">Forgot your password?</a> </p> </form>
  • 12. Los view components son el equivalente a las acciones hijas de MVC5 Invocadas desde Razor Muestran UI parcial con lógica de negocio VIEW COMPONENTS #NETCore2017 12 YA NO MÁS ACCIONES HIJAS
  • 13. • Heredar de ViewComponent • Definir método Invoke (o InvokeAsync) que retorna IViewComponentResult • Parámetros libres (método Invoke no es override). • Vista Default.cshml en /Views/Shared/Components/<Componente> • Invocar desde Razor • @Component.Invoke(“nombre”, new {<parámetros>}) View Components #NETCore2017 13 (LAS CUATRO COSAS A SABER) • Bonus 1.1: Invocar view component como tag helper • <vc:nombre attr=“value” …></vc:nombre>
  • 15. WebApi desaparece y se integra en MVC Core No más ApiController ni clases duplicadas El model binding de MVC Core es una mezcla del de MVC5 y WebApi 2 MVC Y WEBAPI UNIFICADOS #NETCore2017 15 ¡NO MÁS WEBAPI Y MVC!
  • 16. 1. Si el controlador es un controlador de API: 1. Un solo parámetro complejo con [FromBody] 2. N parámetros simples que irán en URL 2. Si el controlador es un controlador de Web: 1. Tantos parámetros simples o complejos como se quiera 2. No usar [FromBody] Model binding unificado #NETCore2017 16 (LAS REGLAS PARA NEWBIES)
  • 18. • El content-type de la petición determina el model binding a usar • Usar application/x-www-form-urlencoded usa model binding a lo MVC • Usar application/json o text/xml usa model binding a lo WebApi • Otros content-types usarán el model binding especificado por el desarrollador Model binding unificado #NETCore2017 18 (LAS CLAVES AVANZADAS)
  • 19. • Parámetros son leídos por value providers • Parámetros son enlazados por model binders • Un mismo parámetro puede ser enlazado múltiples veces • Un mismo parámetro puede ser enlazado desde URL o desde el cuerpo de la petición • Se puede enlazar más de un parámetro desde la URL • Se puede enlazar más de un parámetro desde el cuerpo de la petición Model binding a lo MVC #NETCore2017 19 (LO QUE DEBEMOS SABER)
  • 20. • Parámetros de URL son leídos por value providers • Parámetros de URL son enlazados por model binders • Se puede enlazar más de un parámetro desde la URL • Un mismo parámetro de URL puede ser enlazado varias veces • Solo un parámetro puede ser enlazado desde el cuerpo de la petición • Leído y enlazado a partir de un InputFormatter • El parámetro enlazado a partir del cuerpo de la petición debe estar marcado con [FromBody] Model binding a lo WebApi #NETCore2017 20 (LO QUE DEBEMOS SABER)
  • 22. • Integrada en aquellos action results que heredan de ObjectResult • Usa la cabecera Accept de la petición • Se puede forzar un formato con [Produces] • La respuesta es generada por un OutputFormatter • Podemos crear OutputFormatters nuevos para dar soporte a nuevos formatos Negociación de contenido #NETCore2017 22 (O COMO DARLE AL CLIENTE LO QUE PIDE)
  • 23. • Si no hay un OutputFormatter para el tipo especificado el fallback por defecto es JSON • Se puede añadir el HttpNotAcceptableOutputFormatter que devolverá un 406 Negociación de contenido #NETCore2017 23 (UN PAR DE COSILLAS MÁS…) services.AddMvc().Configure<MvcOptions>(options => { options.OutputFormatters.Insert(0, new HttpNotAcceptableOutputFormatter()); }
  • 24. • En MVC5 / WebApi2 si se devolvía un null ese era serializado Un poco más restful #NETCore2017 24 (DOS DETALLITOS…) • En MVC Core eso devuelve un 204 (No Content) • Las cadenas son devueltas usando text/plain
  • 25. • Podemos modificar las convenciones por defecto y agregar convenciones nuevas • ¿Es buena idea modificar las convenciones? … • Habilita escenarios interesantes • Implementar IApplicationModelConvention • Podemos agregar restricciones implementando IActionConstraintMetadata Convenciones propias #NETCore2017 25 (UN GRAN PODER CONLLEVA UNA GRAN RESPONSABILIDAD)
  • 27. • Empieza ya a usar npm, gulp y similares. • Olvida los bundles de MVC • Usa los IHttpResult de WebApi2. • Olvida el enrutado por verbo de WebApi. • Usa enrutado por atributos en WebApi. • Usa WebApi en modo OWIN. • Usa inyección de dependencias • Evita devolver datos desde MVC5. Usa WebApi. De MVC5 a MVC Core #NETCore2017 27 (CONSEJOS BÁSICOS PARA AYUDARTE A DAR EL SALTO)
  • 28. • Sustituye Razor Helpers por Tag Helpers • Sustituye acciones hijas por View Components • Elimina [FromUri] en ApiControllers y verifica los bindings • Y por supuesto: Valora si vale la pena migrar. ¡Recuerda todo lo que no es realmente MVC Core pero sí ASP.NET Core! De MVC5 a MVC Core #NETCore2017 28 (CONSEJOS BÁSICOS PARA AYUDARTE A DAR EL SALTO)
  • 30. www.plainconcepts.com MADRID Paseo de la Castellana 163, 10º 28046 Madrid. España T. (+34) 91 5346 836 BILBAO Nervión 3 , 6º 48001 Bilbao. España T. (+34) 94 6008 168 BARCELONA Av. Josep Tarradellas 10, 6º 1ª 08029 Barcelona. España T. (+34) 93 3607 114 SEVILLA Avenida de la innovación s/n Edificio Renta Sevilla, 3º A 41020 Sevilla. España DUBAI Dubai Internet City. Building 1 73030 Dubai. EAU T. (+971) 4 551 6653 LONDON Impact Hub Kings Cross 24B York Way, N1 9AB London. UK SEATTLE 1511, Third Ave Seattle WA 98101. USA T. (+1) 206 708 1285