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. Continue reading “Qué es lo que no hay que hacer en ASP.NET, y qué hacer en su lugar”
Category: ASP .NET
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.
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 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:
Cuando hagamos clic en “OK” nos preguntará qué fórmula queremos usar, en nuestro caso seleccionamos “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:
Una vez hagamos clic en “Finish” Radarc comenzará a crear la arquitectura básica y necesaria para un proyecto MVC:
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:
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:
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.
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:
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:
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:
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:
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. Continue reading “ASP.NET Web API (Parte 1)”
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. Continue reading “ASP.NET MVC 4 Beta”
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). Continue reading “Windows Azure”
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. Continue reading “Actualización disponible para ASP.NET desde el Jueves 29 de Diciembre”
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. Continue reading “Aprende Windows Azure el Martes 13 de Diciembre”
Mejoras del editor de CSS en Visual Studio
Este es el séptimo de una serie de post sobre ASP.NET 4.5
<
div>
<
div>
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 Continue reading “Mejoras del editor de CSS en Visual Studio”
Nuevo sitio ASP.NET
Por fin han terminado la web de ASP.NET los chicos de Microsoft