Upload
net-uy-meetup
View
528
Download
3
Embed Size (px)
DESCRIPTION
Video: http://youtu.be/k8FYUGClr2I Codigo: http://sdrv.ms/1bjuHXa Leonardo Botta: http://www.meetup.com/NET-UY/members/71721332/
Citation preview
MVC FOR HUMAN BEINGS
Leonardo Botta
Agenda - MVC
● ASP MVC 4 vs 5● Creación de Proyecto● NuGet Packages● Modelo de Datos con EF 6● Controladores● Vistas● Modelos y Validaciones● Filtros y Ruteo● Autenticación y Seguridad● Optimizaciones● Publicación
Tecnologías Web .NET
Multitud de tecnologías que llevan el nombre ASP.NET
pero diferentes apellidos: Web Forms, MVC, Web Pages, Web API y
SignalR.
ASP MVC 4 vs 5
● Mejoras en autenticación
● Katana (Implementacion Microsoft de OWIN)
● Bootsrap 3
● Entity Framework 6
● Filter overrides
● Routing basado en atributos
Creación de Proyecto
● Templates
● One ASP.NET
● Opciones de proyecto
NuGet Packages Recomendados
● JSON .NET
● Elmah
● JQuery
● Log4Net
● DataAnnotationsExtensions
● Razor Generator
Modelo de Datos con EF 6
● Generar modelo de datos
● Generar entidades
● Connection Strings
● Actualización de BD desde modelo
Controladores
● Agregado de Controladores
○ Scaffolding
○ Custom
● Actions
Vistas
● Layouts
● Vistas con Layout
● Vistas fuertemente tipadas
● Partials
● Scaffolding
Modelos y Validaciones● Creación de Modelos
● Asociación de modelos con vistas
● Validaciones○ Campos requeridos
■ [Required(ErrorMessage = "Campo requerido")]○ Con expresiones regulares
■ [RegularExpression(@"^\d{9}$", ErrorMessage = "El valor debe ser numérico y de 9 dígitos")]
○ Remotes: ■ [Remote("Action", "Controller", HttpMethod = "POST", ErrorMessage = "Error")]
Filtros
● Filtros de seguridad○ [ValidateAntiForgeryToken] - Anti CSRF
● Filtro de verbos HTTP○ [HttpPost]
● Filtros Custom
RuteoPor Atributos:public static void RegisterRoutes(RouteCollection routes){
... routes.MapMvcAttributeRoutes();}
// GET /Integrante/5[Route("{id}")]public ActionResult Show(int id) { ... }
Rutas clásicas:
routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
Autenticación y Seguridad
● Autenticación○ Authentication filters○ Con formulario○ Con Google○ Con Facebook
● Seguridad○ SQL Injection y XSS○ CSRF
Autenticación y Seguridad - 3rd partpublic partial class Startup { // App_Start/Startup.Auth.cs
publicvoid ConfigureAuth(IAppBuilder app) {
app.UseSignInCookies();
app.UseMicrosoftAccountAuthentication( clientId: "", clientSecret: "");
app.UseTwitterAuthentication( consumerKey: "", consumerSecret: "");
app.UseFacebookAuthentication( appId: "", appSecret: "");
app.UseGoogleAuthentication();
}
}
Autenticación y Seguridad - Facebook
Pasos:
● Configure Authentication -> Individual User Accounts al crear proyecto
● Crear Aplicación en Facebook
● ConfigureAuth en App_Start\Startup.Auth.cs ○ app.UseFacebookAuthentication(
appId: "000000000000000", appSecret: "000000000000000");
dvdd
Autenticación y Seguridad - Filtro
Tipos de Filtros:
● OnAuthorization● OnException● OnActionExecuting● OnActionExecuted● OnResultExecuting● OnResultExecuted
Los Filtros corren en este orden:
1. Authorization filters2. Action filters3. Response filters4. Exception filters
Autenticación y Seguridad - Filtropublic class IsAjaxRequest : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.HttpContext.Request.IsAjaxRequest()) { return; }
// it was a standard request filterContext.Controller.TempData["ErrorMessage"] = string.Format(“This is not AJAX”);
filterContext.Result = new RedirectResult("~/Error/AuthorizationError"); }}
Optimizaciones
● Reducción de Requests al servidor
● Minimización de CSS y JS○ BundleConfig.cs○ <script src= "@BundleTable.Bundles.ResolveBundleUrl("~/mainJs", false)" type="
text/javascript"></script>
● GZip○ <httpCompression> en eeb.config
Publicación
● Tipos y opciones de publicación de Visual Studio
● Deploy
Dudas?
GRACIAS!