Archivo de la categoría: ASP .NET

Qué es lo que no hay que hacer en ASP.NET, y qué hacer en su lugar

Vamos a ver varios errores que se suelen cometer en proyectos ASP.NET. Veremos algunas recomendaciones de qué deberíamos hacer para no caer en esos errores. Está basado en una presentación de Damian Edwards en el Norwegian Developers Conference. Sigue leyendo

Radarc

Radarc, el “Tanque” de Visual Studio

Seguro que todos tenéis en algún rincón de vuestra mente la gran escena de Triniti en Matrix: “Tanque, necesito un programa de pilotaje para un helicóptero B-212, ¡Date Prisa!”

¿Os imagináis que algo así fuese posible? Pues para sorpresa de todos, es posible gracias a Radarc y los chicos de Icinetic que lo hacen posible, por ahora en nuestro mundo del bit&byte.

Radarc

RadarC es un generador de código para .NET muy sencillo y realmente útil. Plantándonos unas reglas de diseño arquitecturales sólidas con las que cimentar nuestros proyectos. Y para muestra un botón, vamos a crear una pequeña aplicación en para MVC con RadarC, pero para ello tenemos que prepararnos el sistema.

Sólo tenemos que ir a la web de Radarc y seguir sus instrucciones de instalación, son muy sencillas. Acto seguido nos descargamos la Formula MVC, hay que hacer el proceso de compra pero es totalmente gratuito ;).

¿Qué es una Formula?

Una fórmula es una arquitectura empaquetada y configurada por defecto con todo lo necesario para centrarnos en nuestro negocio y preocuparnos de hacer lo que realmente aporta valor a nuestro proyecto. En el ejemplo que vamos a ha realizar se trata de una aplicación para ASP .NET MVC y la Formula MVC nos va a permitir crearla de forma muy sencilla y ordenada como veremos.

Manos al teclado.

Una vez preparado nuestro entorno, sólo tenemos que abrir Visual Studio 2010 e irnos al menú “Nuevo Proyecto”. Veremos que ha aparecido una nueva plantilla llamada Radarc:

Radarc Template

Cuando hagamos clic en “OK” nos preguntará qué fórmula queremos usar, en nuestro caso seleccionamos “MVC Formula”:

MVC Formula

En este momento nos pedirá cierta información que necesita para poder acceder a la base de datos, namespace por defecto, y el estilo básico (hemos seleccionado el Green) necesario para crear la estructura básica de toda la solución:

Deploy MVC Formula

Una vez hagamos clic en “Finish” Radarc comenzará a crear la arquitectura básica y necesaria para un proyecto MVC:

Estructura de la solución

Ahora podemos empezar a modelar nuestro negocio de forma muy sencilla. Fijaos que directamente nos deja abierto el diseñador de modelos de nuestro Entity Data Model para comenzar a modelar nuestro negocio. De esta manera vamos a añadir cuatro Entidades a este modelo directamente:

RadarC Modeling 1

Las cuatro entidades y las propiedades que necesitamos son :

  • Product:
    • Description (string)
    • UnitPrice (decimal)
  • Order Detail:
    • Ammount (Int16)
    • Discount (Single)
  • Order:
    • OrderDate (DateTime)
    • DeliveryDate (DateTime)
    • ShippingAddress (String)
  • Customer:
    • CustomerCode (Int16)
    • CompanyName (String)
    • ContactName(String)

Así quedaría nuestro modelo:

RadarC Modeling 2

Ahora toca establecer las relaciones entre nuestras entidades, tenemos que establecer las relaciones de

  •  Un Product está en varias OrderDetails
  • Una Order tiene varias OrderDetails
  • Un Customer tiene 0 o varias Order.

RadarC Modeling 3

Guardamos los cambios y ejecutamos la aplicación, aseguraros de que el proyecto por defecto es el  proyecto MVC, ya que si no lo hacéis, se puede establecer como proyecto de inicio otro y os dirá que no existe un punto de entrada.

Cuando ejecutamos la aplicación, RadarC comenzará a generar todo el código fuente, creando las entidades, test, vistas,  servicios que exponen la lógica de negocio para ser consumida desde otros clientes, View Models y lanzará la aplicación lista para ejecutar:

Demo App

Y ya, a partir de aquí tenemos una aplicación MVC lista para poder meterle datos y todo. Es una app totalmente funcional, id probando a añadir clientes, productos y todo lo demás.

Fijaos que incluso la aplicación ya está preparada para múltiples idiomas, si abrimos el Global.asax veremos este código y en el directorio App_GlobalResources tendremos los diferentes archivos de recursos:

Localization

Resumen

Los chicos de Icinetic han hecho un excelente trabajo con Radarc, un trabajo realmente envidiable.

Me ha sido posible acceder a una beta privada que tienen lista ya para VS 2012 y Windows 8 y el funcionamiento es exactamente igual.

Juan María Laó Ramos

HttpAntiForgeryException en ASP.NET MVC

Hola a todos, gracias a Jose María Aguilar hoy he resuelto un pequeño problema con ASP.NET MVC de esos de los que te pegas dos días loco.

La cosa se puede reproducir muy fácilmente creando un nuevo proyecto MVC tal cual nos lo genera Visual Studio 2012:

        MVC Default Project         

Si la ejecutamos directamente  nos aparecerá la web por defecto totalmente funcionando. Ahora, vamos a registrar un nuevo usuario, y nos mantendremos logados.

Para reproducir el error que me ha vuelto loco sólo tenemos que deslogarnos, hacer clic en login y logarnos. Una vez logamos le damos al botón del navegador para que vaya a la página anterior, y veremos que se mantiene el nombre de nuestro usuario:User Logged

Y la gracia está en que si escribimos nuestro password y nos logamos obtenemos un bonito error:

Server Error in '/' Application.


The provided anti-forgery token was meant for user "", but the current user is "juanma".

             Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.Mvc.HttpAntiForgeryException: The provided anti-forgery token was meant for user "", but the current user is "juanma".
Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[HttpAntiForgeryException (0x80004005): The provided anti-forgery token was meant for user "", but the current user is "juanma".]
   System.Web.Helpers.AntiXsrf.TokenValidator.ValidateTokens(HttpContextBase httpContext, IIdentity identity, AntiForgeryToken sessionToken, AntiForgeryToken fieldToken) +234369
   System.Web.Helpers.AntiXsrf.AntiForgeryWorker.Validate(HttpContextBase httpContext) +71
   System.Web.Helpers.AntiForgery.Validate() +80
   System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext) +22
   System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor) +96
   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__1e(AsyncCallback asyncCallback, Object asyncState) +446
   System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
   System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +302
   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState) +30
   System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
   System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +382
   System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
   System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +317
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +15
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState) +71
   System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +249
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929            

 Simplemente precioso.

Es un problema de la caché,  y es que el forgery-token se guarda información relativa a la sesión que hemos iniciado con el servidor, entre ellas el usuario logado. Al ser una petición GET el navegador intenta obtener ese token de la caché, pero el servidor se da cuenta de que ese token ha sido cargado de la caché del navegador y no ha sido generada en la petición actual, por lo que, para evitar ataques de Cross-Site Request Forgery, nuestro servidor (que es muy listo) dice: eh!, ¿a donde te crees que vas?

La solución para que el navegador no nos cargue ese token (y otras cosas) en las peticiones GET que hagamos cuando queremos logarnos es indicarlo en nuestro método de login. En un proyecto MVC4 por defecto, ese método está en la clase AccountController.cs

 [AllowAnonymous]
 public ActionResult Login(string returnUrl)
 {
    ViewBag.ReturnUrl = returnUrl;
    return View();
 }

¿Cómo se lo indicamos?, añadiendo el atributo OutputCache de la siguiente manera:

 [AllowAnonymous]
 [OutputCache(NoStore = true, Duration = 0)]
 public ActionResult Login(string returnUrl)
 {
    ViewBag.ReturnUrl = returnUrl;
    return View();
 }

Si recompilamos y ejecutamos repitiendo el proceso de logarnos, navegar a la página anterior con el botón del navegador y haciendo clic en Login, ya no nos aparece el nombre de nuestro usuario anterior, sino que aparece vacío y podemos logarnos sin ningún problema y sin excepciones

Espero que os haya gustado y de nuevo tengo que darle las gracias a Jose María Aguilar por su ayuda :)

ASP.NET Web API (Parte 1)

Hace poco anuncié la release de ASP.NET MVC 4 Beta. ASP.NET MVC4 es una actualización con un montón de nuevas características. Una de las características que más me gustan es el soporte para crear "Web APIs". En este post es el primero de unos cuantos en los que veremos cómo aprovecharnos de esta nueva funcionalidad. Sigue leyendo

ASP.NET MVC 4 Beta

Hace unos días publicamos ASP.NET MVC 4 Beta. Es una release importante ya que viene con un montón de nuevas características.

ASP.NET MVC 4 Beta funciona con VS 2010 y .NET 4.0, y es compatible con instalaciones de versiones anteriores de ASP.NET MVC (es decir, podéis instalarla sin tener que preocuparos por el posible impacto que pueda tener en las aplicaciones que ya tenéis desarrolladas con otras versiones). La publicamos bajo la licencia "go-live" que os permite crear y desplegar aplicaciones en producción con ella. Haced clic aquí para descargarla e instalarla desde ya. Sigue leyendo

Windows Azure

Como algunos ya sabréis he pasado la mayor parte del tiempo de los últimos 6 meses trabajando en Windows Azure - que es la plataforma en la nube de Microsoft (Continúo liderando los equipos que han creado ASP.NET, partes del nucleo de .NET y VS, y algunos productos más). Sigue leyendo

Actualización disponible para ASP.NET desde el Jueves 29 de Diciembre

Hace unos días MicrosofT publicó un boletín de seguridad anunciando que se iba a publicar una actualización de seguridad para una vulnerabilidad de ASP.NET.

La actualización MS11-100 está disponible a través de Windows Update, del Windows Server Update Service y como descarga en el centro de descargas de Microsoft.

La actualización resuelve un problema que permite realizar ataques de denegación de servicio (DoS) presente en todas las versiones de ASP.NET. No se han detectado ataques en ninguno de nuestros clientes usando este exploit, pero recomendamos que se aplique la actualización lo antes posible. Sigue leyendo

Aprende Windows Azure el Martes 13 de Diciembre

Como algunos ya sabéis, he estado estos últimos seis meses trabajando en Windows Azure - la plataforma de la nuve de Microsoft (Seguiré trabajando en ASP.NET, .NET, VS y en otros productos).

El próximo Martes 13 de Diciembre estaré en un evento para desarrolladores Learn Windows Azure. En el evento podrémos aprender qué nos ofrece Windows Azure. Podéis asistir tanto en persona(en el campos de Microsoft en Redmond) como en streaming. Ambas opciones son totalmente gratuitas. Sigue leyendo

Mejoras del editor de CSS en Visual Studio

Este es el séptimo de una serie de post sobre ASP.NET 4.5

Las próximas releases de .NET y Visual Studio incluyen un montón de nuevas características. Con ASP.NET 4.5 veremos mejoras realmente increíbles tanto en Web Forms como en MVC, así como en el núcleo de ASP.NET en el que se sustentan ambas tecnologías.

En el post de hoy veremos algunas de las mejoras que traerá Visual Studio que hacen del trabajo con CSS y CSS3 se más sencillo en proyectos ASP.NET Sigue leyendo

Increible lista de Power Tools

Scot Hanselman lleva años haciendo y actualizando una lista personal de aplicaciones muy interesantes que usa y recomienda. Lo hemos visto hoy con su última actualización resaltando en color rojo las últimas herramientas añadidas.

La lista está en el idioma de Shakespeare. Pide que por favor no se reproduzca, copie y pegue en ningún sitio ya que es un trabajo personal que lleva haciendo desde hace bastantes años y pide que en cambio se enlace desde los sitios que quieran compartirla.

La he encontrado bastante interesante y ya estoy usando alguna de ellas.

Os recomiendo que le deis una ojeada, seguramente encontraréis algo interesante.

Os dejo directamente el enlace:

http://www.hanselman.com/toolsHerramientas recomendadas por Scott Hanselman

 

Espero que os sirva alguna de estas aplicaciones.

Juan María Laó Ramos.

 

Nuevo soporte de Empaquetado y Minificación (ASP.NET 4.5)

Este es el sexto de una serie de post sobre ASP.NET 4.5

Las próximas releases de .NET y Visual Studio incluyen un montón de nuevas características. Con ASP.NET 4.5 veremos mejoras realmente increÍbles tanto en Web Forms como en MVC, así como en el núcleo de ASP.NET en el que se sustentan ambas tecnologías.

En el post de hoy veremos el resultado del trabajo que estamos haciendo para incluir soporte de empaquetado y minificación en ASP.NET- que hace más fácil mejorar el rendimiento de nuestras aplicaciones. Esta característica se puede usar en todas las aplicaciones ASP.NET, tanto en Web Forms como en MVC. Sigue leyendo

Extensión de Visual Studio: Web Essentials de Mads Kristensen

Visual Studio 2010 es muy extensible y ha permitido a mucha gente del equipo a que prueben nuevas caracteríticas para del desarrollo web sin tener que recompilar Visual Studio. Una de esas extensiones es "Web Essentials" que ha hecho Mads Kristensen. Mads es el que se encarga de las herramientas de HTML5 y CSS3 en nuestro equipo. Sigue leyendo

ImageResizer una pequeña joya

El número de paquetes disponibles en el sitio NuGet se está empezando a llenar. Os recomiendo que le echéis un vistazo de vez en cuando para ver qué cosas nuevas van apareciendo, seguro que encontráis algo que os pueda ser útil.

Hoy vamos a ver un pequeño pero útil paquete del que Bertrand Le Roy se ha hecho eco hace poco para poder reescalar imágenes de forma sencilla en ASP.NET. El paquete es ImageResizer. Sigue leyendo

Model Binding Parte 3: Actualización y Validaciones (Serie ASP.NET vNext)

Este es el quinto de una serie de post que estoy haciendo sobre ASP.NET vNext.

La próxima release de Visual Studio incluye un montón de nuevas características de edición de código (de las que hablaré también en el futuro).

Este post es el tercero de tres en el que hablamos sobre el nuevo soporte de Model Binding en Web Forms. Model Binding es una extensión del sistema de databinding de ASP.NET Web Forms , y ofrece un paradigma de acceso a datos centrados en el código. Hace uso de un montón de conceptos de binding que introdujimos con ASP.NET MVC - y los integra en el modelo de controles de servidor de Web Forms. Sigue leyendo

Nuevo sitio web beta.asp.net

Aunque aún esté en fase beta, ya podemos ir echando un vistazo al nuevo sitio que nos tiene preparados los chicos de ASP.NET.

En http://beta.asp.net podemos ver cómo va a ser. El diseño aún está en proces, pero como son unos impacientes ya quieren empezar a enseñarlo. Pero la cosa no va solo de diseño, también han mejorado la organización y la navegación esperando que sea mucho más fácil de encontrar la información que buscamos. También han puesto un sitio para proponer mejoras, insultos y demás. Sigue leyendo

Un componente interesante para ASP.NET MVC: WebGrid

Hace poco que se publicó ASP.NET MVC 3 y junto a ella se publicó también una versión de Web Matrix. Esta release incluía un montón de ejemplos que, lejos de ser simples ejemplos, muestran un montón de características para mostrar datos de muy diversas maneras.

Un ejemplo bastante interesante es WebGrid que nos muestra una forma muy simple de mostrar datos de manera personalizable, con paginación , ordenación y actualizaciones con AJAX.

Aquí tenéis un enlace que cuenta paso por paso cómo podemos usarlo, modificarlo e incorporarlo en nuestras aplicaciones.

Espero que os guste.

Juan María Laó Ramos

 

Model Binding Parte 2: Filtrando datos (Serie ASP.NET vNext)

Este es el cuarto de una serie de post que estoy haciendo sobre ASP.NET vNext.

La próxima release de Visual Studio incluye un montón de nuevas características de edición de código (de las que hablaré también en el futuro). En el post de hoy veremos algunas pequeñas mejoras que incrementarán un montón la productividad con el editor de HTML a la hora de hacer las tareas más comunes.

Este post es el segundo de tres en el que hablamos sobre el nuevo soporte de Model Binding en Web Forms. Model Binding es una extensión del sistema de databinding de ASP.NET Web Forms , y ofrece un paradigma de acceso a datos centrados en el código. Hace uso de un montón de conceptos de binding que introdujimos con ASP.NET MVC - y los integra en el modelo de controles de servidor de Web Forms.

En el primer post de Model Binding vimos las bases sobre selección de datos. En el post de hoy vamos a ver cómo podemos filtrar datos previamente seleccionados basandose en la entrada de usuario, mientras mantenemos una visión de acceso a datos centrada en código. Veremos cómo podemos usar filtros con entrada de datos y valores obtenidos de un control dropdownlist. Sigue leyendo

Model Binding Parte 1: Seleccionando datos (ASP.NET vNext)

Este es el tercer post de la serie que estoy haciendo sobre ASP.NET vNext.

Las releases vNext de .NET  y Visual Studio incluyen toneladas de nuevas características y capacidades. Con ASP.NET vNext veremos un montón de mejoras tanto en Web Forms  como en MVC - y también en el núcleo sobre el que están construidos.

El post de hoy es el primero de tres post en los que hablaremos sobre el nuevo soporte de Model Binding que vendrá en Web Forms. Model Binding es una extensión del sistema de databinding de ASP.NET Web Forms , y ofrece un paradigma de acceso a datos centrados en el código. Hace uso de un montón de conceptos de binding que introdujimos con ASP.NET MVC - y los integra en el modelo de controles de servidor de Web Forms. Sigue leyendo

Controles de datos fuertemente tipados (Serie ASP.NET vNext)

Este es el segundo de la serie de post sobre ASP.NET vNext  que estoy haciendo.

Las releases vNext de .NET  y Visual Studio incluyen toneladas de nuevas características y capacidades. Con ASP.NET vNext veremos un montón de mejoras tanto en Web Forms  como en MVC - y también en el núcleo sobre el que están construidos.

El post de hoy es el primero de unos cuantos en el que hablaremos sobre algunas mejoras que van a venir en Web Forms. Veremos el nuevo soporte de controles de datos fuertemente tipados. Sigue leyendo