sábado, 18 de febrero de 2012

Ya tenemos aquí la beta de ASP.NET MVC4

Desde hace un par de días ya tenemos disponible la versión beta de ASP.NET MVC4. Podemos descargarlo desde el Download Center de Microsoft o via NuGet. Antes de instalar esta nueva versión debemos desinstalar la versión preview en caso de tenerla instalada, y no es necesario hacer nadar con la instalación de ASP.NET MVC3 o anteriores versiones ya que seguirán funcionando.

La primera de la novedades que veremos será la aparición de nuevas plantillas a la hora de crear un proyecto ASP.NET MVC4 Beta.


  • Empty, Internet Application y Intranet Application, sin cambios respecto a la versión anterior.
  • Mobile Application, es una plantilla creada si queremos crear un sitio específico para dispositivos móviles. Esta plantilla está basada en la utilización de jQuery Mobile. Esta plantilla contiene la misma estructura que la plantilla Internet Applicacion. De hecho el código de la controlladora es igual, pero la interfaz está modelada utilizando los estilos de jQuery Mobile.


  • ASP.NET Web API, para mi una de las grandes novedades de esta entrega, y que es un framework que nos facilita la creación de aplicaciones que publican servicios y datos utilizando HTTP.
  • Single Page Application, es otra de las novedad de esta versión, y que incluye un conjunto de herramientas y componentes específicos para implementar aplicaciones en una única página web, mediante el uso de Ajax. Un ejemplo de este tipo de aplicaciones lo tenemos en gmail donde todo se mueve en la misma página a base de llevar al límite el uso de Ajax.
Dejaré para otra entrada algún ejemplo sobre la nueva ASP.NET Web Api y la Simple Page Application.

Mas referencias | jQuery Mobile | Gmail

lunes, 6 de febrero de 2012

ASP.NET MVC3 validateRequest

Al usar un editor html en ASP.NET MVC3 y hacer un POST he obtenido el siguiente error

A potentially dangerous Request.Form value was detected from the client (Descripcion="párrafo").


Description: Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted. This value may indicate an attempt to compromise the security of your application, such as a cross-site scripting attack. To allow pages to override application request validation settings, set the requestValidationMode attribute in the httpRuntime configuration section to requestValidationMode="2.0". Example: . After setting this value, you can then disable request validation by setting validateRequest="false" in the Page directive or in the configuration section. However, it is strongly recommended that your application explicitly check all inputs in this case.


Básicamente el error es debido a que en el post va código html y esto es interpretado como un problema de seguridad. Así que si estamos seguro de lo que estamos haciendo, podemos evitar la comprobación desactivando la validación en la acción de nuestra controladora. Hay que tener en cuenta que quitando la validación estaremos expuestos a que nuestros usuarios introduzcan código javascript en nuestro formulario con el riesgo de seguridad que eso implica, así que, hacer una limpieza de la cadena de caracteres antes de guardarla en la base de datos puede ser altamente recomendable.

//
// POST: /edit/
[HttpPost]
[ValidateInput(false)]
public ActionResult edit(Model model) {
  // ...
}

Eso es todo, happy coding !

Más info | ASP.NET MVC3jHtmlArea

viernes, 3 de febrero de 2012

Algunos consejos más sobre log4net

Tras escribir el artículo introductorio sobre como trazar nuestras aplicaciones con log4net me di cuenta que podría ser útil comentar algunas cosillas que a mi fueron útiles para dejar la librería funcionando, ya que en las primeras pruebas (como era de suponer) no se registraba nada en la base de datos.

A la hora de crear nuestro logger usaremos un código similar a este
try 
{
  // ... código a trazar ...
}
catch (Exception ex)
{
  // Creamos nuestro logger
  ILogger logger = LogManager.GetLogger("Logger");
  // Cargamos la configuración
  XmlConfigurator.Configure();
  // Registramos nuestra excepción
  Logger.Error(ex.Message, ex);
}
Como vemos usaremos la cadena "Logger" para obtener la instancia a nuestro logger. Bien, este nombre debe ser el que pongamos en nuestro fichero de configuración.
  
    
      
        
        
      
    
      
Si esto no fuera así, log4net no podría cargar el logger correctamente y obtendríamos un error. Una vez que estaba seguro que el logger estaba instanciado correctamente, seguía viendo que no se registraba nada en la base de datos. Tras comprobar que la cadena de conexión era válida, y tras releerme un poco la documentación vi que había una propiedad en el fichero de configuración que se llamaba bufferSize. Esta propiedad como su nombre indica se encarga de guardar los registros hasta que se alcanza un número determinado, momento en el cual envia los registros a la salida configurada, en mi caso, la base de datos. El problema es que en mi caso se escriben sólo las excepciones que produce el programa por lo que tener un bufferSize de 100, me parecía excesivo, así que decidí ponerlo a 0 (sin buffer).
        
      
Con esto ya vi vi como todos los registros se almacenaban correctamente. Pero, ¿y si todo esto falla? Si todo esto falla tenemos otra alternativa y es hacer que el log4net nos informe de los errores que se comentan internamente en la librería. Para lograr esto, debemos añadir esto a nuestro <appsettings>
  
    
  
Para ver los errores en un fichero solo debemos redirigir la salida del TraceListener, por ejemplo, a un fichero de text añadiendo los siguiente a nuestro fichero de configuración
    
    
      
        
      
    
  
Con esto podremos ver la información que nos da log4net en su ejecución y quizá esto nos arroje algo de luz de por qué no se registran nuestros sucesos.

Happy coding!

Más info | Como trazar nuestras aplicaciones con log4net

jueves, 2 de febrero de 2012

Technorati Claim Token

CMD2TVPZYYHP

No hagan caso de este artículo, lo necesito para que technorati indexe el blog y poder aparecer allí también! Cuando registras tu blog te envían este correo:
This is an automatically-generated email.
Thank you for submitting your blog claim on Technorati. Technorati will need to verify that you are an author of the site http://smarrerof.blogspot.com/ by looking for a unique code. We have just assigned the claim token CMD2TVPZYYHP to this claim. Please visit http://technorati.com/account/ for more details, including how to use the claim token.
Thank you.
Y lo que hay que hacer es poner el claim token en un post para que technorati pueda comprobar que eres el dueño del blog que estás intentando registrar.

Una vez más, Happy coding !