locked
Ayuda con error extraño al ejecutar aplicación RRS feed

  • Pregunta

  • Hola,

    tengo una aplicación web que me da un error solo al ejecutarla, el generar la solución me funciona correctamente. Estoy utilizadon VS2010 profesional.

    Comento lo que tengo montado, por un lado una clase que hace de base para el resto de páginas de la aplicación, esta clase está en la carpeta AppCode.

    El código que nos interesa está así:

     

    public class PaginaBase : System.Web.UI.Page
    {
    	public string desencripta(string str)
    	{
    		Encryption64 oES = new Encryption64();
    		return oES.Decrypt(str, "_");
    	}
    }
    

     


    La página donde me da error al ejecutar es esta:

     

    public partial class Site_MiPagina : PaginaBase
    {
    	protected void Page_Load(object sender, EventArgs e)
    	{
    		cadena = Request.QueryString["campo"];
    		string str = desencripta(cadena.Replace(" ", "+"));
    	}
    }
    

     


    Y el error es el siguiente:

     

    El código de usuario no controló NullReferenceException
    Referencia a objeto no establecida como instancia de un objeto.
    

     

    Pero lo curioso de esto es que solo me da error si tengo el formulario en cuestión abierto en el editor o si no tengo ningún formulario abierto, lo hace tanto en modo Debug como en modo Release.

    En el caso de tener cualquier otro formulario, el entorno de desarrollo se lanza bien y me ejecuta la aplicación con normalidad.

    Si compilo y subo una release a productivo, también me funciona correctamente.

    ¿Alguna idea de a que puede ser debido esto?

     

     

     


    miércoles, 21 de diciembre de 2011 9:01

Respuestas

  • hola

    es que esto

    cadena = Request.QueryString["campo"];

    esta incorrecto, como aseguras que en la url tiene ese parametro, debes validarlo

    public partial class Site_MiPagina : PaginaBase
    {
    	protected void Page_Load(object sender, EventArgs e)
    	{
    if(Request.QueryString["campo"] != null){

      cadena = Convert.ToString(Request.QueryString["campo"]); string str = desencripta(cadena.Replace(" ", "+"));

    }
      } }

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 21 de diciembre de 2011 12:04

Todas las respuestas

  • hola

    es que esto

    cadena = Request.QueryString["campo"];

    esta incorrecto, como aseguras que en la url tiene ese parametro, debes validarlo

    public partial class Site_MiPagina : PaginaBase
    {
    	protected void Page_Load(object sender, EventArgs e)
    	{
    if(Request.QueryString["campo"] != null){

      cadena = Convert.ToString(Request.QueryString["campo"]); string str = desencripta(cadena.Replace(" ", "+"));

    }
      } }

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 21 de diciembre de 2011 12:04
  • Leandro tío... saca ese Convert.ToString que solo molesta! ;-)

    QueryString es una NameValueCollection ya devuelve cadenas!!! :D

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    miércoles, 21 de diciembre de 2011 14:26
    Moderador
  • Hola,

    a parte de eso, la línea donde me marca el error es esta:

    string str = desencripta(cadena.Replace(" ", "+"));

     

     

    miércoles, 21 de diciembre de 2011 16:15
  • Buenas!

    Es lo que te ha dicho @Leandro.

    Si cadena vale null, entonces cadena.Replace es una NullReferenceExcepcion como una casa :)

    Añade el if que te ha indicado Leandro para evitar este caso y listos.

    PD: Si necesitas str más adelante asígnala al princpio a un valor por defecto (p.ej. string.Empty) y después usa el if que te ha pasado Leandro.

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    miércoles, 21 de diciembre de 2011 16:20
    Moderador
  • upppssss como no me he dado cuenta antes :)

    tienes razón.

    Gracias.

     

    Pero... ¿porqué solo marca el error VS si tengo abierto el fichero?

    jueves, 22 de diciembre de 2011 6:53
  • Buenas Sergio,

    Si estás depurando, VS tiene la posibilidad de capturar el error y mostrarte la ventanita aquella de que se ha producido una excepción y tal.

    Si no estás depurando (directamente visitas la URL en tu explorador, incluso aunque VS esté en marcha) VS no puede hacer nada por monitorizar la ejecución de tu programa, por lo que lo normal es que te salga la página amarilla de error de ASP.NET en estos casos.

    Piensa además, que cuando empiezas a depurar (F5) con VS un proyecto web, esto levanta un servidor web de pruebas en tu máquina, pero cuando le das a "stop", VS deja de depurar, pero el servidor web no se detiene, es decir puedes enviar más peticiones con el browser y esas serán procesadas (pero ya NO monitorizadas por VS ya que has parado la depuración). Cuando le das a F5 de nuevo en VS, éste mira si el servidor web ya está en marcha (para no poner dos en marcha) y empieza a monitorizar tu aplicación.

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    jueves, 22 de diciembre de 2011 9:19
    Moderador