ASP.NET MVC Core

Click here to load reader

  • date post

    07-Feb-2017
  • Category

    Technology

  • view

    427
  • download

    0

Embed Size (px)

Transcript of ASP.NET MVC Core

PowerPoint Presentation

24.01.2017ASP.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 Toms#NETCore20172

MVC Core mantiene el mismo modelo de desarrollo que MVC5Vistas (Razor), Controladores, Acciones, Resultados de accinConvencionesEnrutamiento (tabla de rutas + enrutamiento por atributos)

Si sabes MVC5 el salto inicial a MVC Core no es muy complejoMisma filosofaLo que es (casi) igual#NETCore20173(COMPARNDOLO CON MVC5, CLARO)

Razor Tag HelpersRazor View ComponentsUnificacin MVC WebApiConvenciones personalizadasAlgunas cosas que son distintas#NETCore20174(Y LO QUE VEREMOS HOY)

MVC Core se alinea con las tendencias front modernas

Directorio wwwroot donde se despliega la appCiclo de trabajo usando npm, gulp, bower,

Visual Studio 2015/2017 tiene gran soporte para esas herramientasFcil uso con herramientas externas

La gran diferencia#NETCore20175(Y LO QUE DEBERAS IR VIENDO INCLUSO EN MVC5)

Muchas de las diferencias son de ASP.NET Core, no de MVC Core:

SeguridadLoggingGestin de erroresConfiguracinMVC Core es un middleware core#NETCore20176(SI CONOCES OWIN/KATANA ESTS DE SUERTE!)

Los Tag Helpers son etiquetas Razor personalizadas que permiten encapsular cdigo RazorParecidos a los helpers tradicionales, pero ms potentesRazor TAG HELPERS#NETCore20177INTEGRANDO HELPERS CON MS FACILIDAD

Demo: Creando un Tag Helper8

Mayor integracin con herramientas de diseoHeredan de la clase TagHelperSe pueden redefinir etiquetas HTML existentesUna etiqueta HTML puede ser o no un Tag Helper en funcin de sus atributosTienen conocimiento de su contenido

Directiva @addTagHelper para importarlos

Razor Tag Helpers#NETCore20179(LAS CLAVES)

Formularios ms claros#NETCore201710YA NO MS @HTML. (CASI) Use a local account to log in. Forgot your password?

Demo: Tag Helper repeater11

Los view components son el equivalente a las acciones hijas de MVC5Invocadas desde RazorMuestran UI parcial con lgica de negocio VIEW COMPONENTS#NETCore201712YA NO MS ACCIONES HIJAS

Heredar de ViewComponentDefinir mtodo Invoke (o InvokeAsync) que retorna IViewComponentResultParmetros libres (mtodo Invoke no es override).Vista Default.cshml en /Views/Shared/Components/Invocar desde [email protected](nombre, new {})

View Components#NETCore201713(LAS CUATRO COSAS A SABER)Bonus 1.1: Invocar view component como tag helper

Demo: View Components14

WebApi desaparece y se integra en MVC CoreNo ms ApiController ni clases duplicadasEl model binding de MVC Core es una mezcla del de MVC5 y WebApi 2MVC Y WEBAPI UNIFICADOS#NETCore201715NO MS WEBAPI Y MVC!

Si el controlador es un controlador de API:Un solo parmetro complejo con [FromBody]N parmetros simples que irn en URLSi el controlador es un controlador de Web:Tantos parmetros simples o complejos como se quieraNo usar [FromBody]Model binding unificado#NETCore201716(LAS REGLAS PARA NEWBIES)

Demo: Model Binding17

El content-type de la peticin determina el model binding a usarUsar application/x-www-form-urlencoded usa model binding a lo MVCUsar application/json o text/xml usa model binding a lo WebApi

Otros content-types usarn el model binding especificado por el desarrolladorModel binding unificado#NETCore201718(LAS CLAVES AVANZADAS)

Parmetros son ledos por value providersParmetros son enlazados por model bindersUn mismo parmetro puede ser enlazado mltiples vecesUn mismo parmetro puede ser enlazado desde URL o desde el cuerpo de la peticinSe puede enlazar ms de un parmetro desde la URLSe puede enlazar ms de un parmetro desde el cuerpo de la peticinModel binding a lo MVC#NETCore201719(LO QUE DEBEMOS SABER)

Parmetros de URL son ledos por value providersParmetros de URL son enlazados por model bindersSe puede enlazar ms de un parmetro desde la URLUn mismo parmetro de URL puede ser enlazado varias vecesSolo un parmetro puede ser enlazado desde el cuerpo de la peticinLedo y enlazado a partir de un InputFormatterEl parmetro enlazado a partir del cuerpo de la peticin debe estar marcado con [FromBody]

Model binding a lo WebApi#NETCore201720(LO QUE DEBEMOS SABER)

Demo: Custom InputFormatter21

Integrada en aquellos action results que heredan de ObjectResultUsa la cabecera Accept de la peticinSe puede forzar un formato con [Produces]La respuesta es generada por un OutputFormatter

Podemos crear OutputFormatters nuevos para dar soporte a nuevos formatosNegociacin de contenido#NETCore201722(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 aadir el HttpNotAcceptableOutputFormatter que devolver un 406

Negociacin de contenido#NETCore201723(UN PAR DE COSILLAS MS)services.AddMvc().Configure(options =>{options.OutputFormatters.Insert(0, new HttpNotAcceptableOutputFormatter());}

En MVC5 / WebApi2 si se devolva un null ese era serializadoUn poco ms restful#NETCore201724(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 nuevasEs buena idea modificar las convenciones? Habilita escenarios interesantesImplementar IApplicationModelConvention

Podemos agregar restricciones implementando IActionConstraintMetadataConvenciones propias#NETCore201725(UN GRAN PODER CONLLEVA UNA GRAN RESPONSABILIDAD)

Demo: Convenciones propias26

Empieza ya a usar npm, gulp y similares.Olvida los bundles de MVCUsa los IHttpResult de WebApi2. Olvida el enrutado por verbo de WebApi.Usa enrutado por atributos en WebApi.Usa WebApi en modo OWIN.Usa inyeccin de dependenciasEvita devolver datos desde MVC5. Usa WebApi.De MVC5 a MVC Core#NETCore201727(CONSEJOS BSICOS PARA AYUDARTE A DAR EL SALTO)

Sustituye Razor Helpers por Tag HelpersSustituye 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#NETCore201728(CONSEJOS BSICOS PARA AYUDARTE A DAR EL SALTO)

[email protected]@plainconcepts.com

www.plainconcepts.comMADRIDPaseo de la Castellana 163, 1028046 Madrid. EspaaT. (+34) 91 5346 836BILBAONervin 3 , 648001 Bilbao. EspaaT. (+34) 94 6008 168BARCELONAAv. Josep Tarradellas 10, 6 108029 Barcelona. EspaaT. (+34) 93 3607 114SEVILLAAvenida de la innovacin s/nEdificio Renta Sevilla, 3 A41020 Sevilla. EspaaDUBAIDubai Internet City. Building 173030 Dubai. EAUT. (+971) 4 551 6653LONDONImpact Hub Kings Cross24B York Way, N1 9AB London. UKSEATTLE1511, Third AveSeattle WA 98101. USAT. (+1) 206 708 1285