none
Problemas en la publicación de aplicación web basada en MVC 3 RRS feed

  • Pregunta

  • Hola,

    estoy intentando publicar mi aplicación web basada en MVC3 y tengo el siguiente problema. Al principio de la aplicación se despliega una ventana de login, en la que el usuario en cuestión debe de loguearse antes de comenzar a usarla. El tema es que una vez rellenado el usuario y la contraseña, al pulsar el botón "aceptar" realizo una petición por AJAX para que se consulte la base de datos y compruebe si el usuario es aceptado. No obstante me da error en el servidor, concretamente "Error de servidor Bad Request[object Object] error.

    Haber si alguno me da una solución o me orienta sobre los pasos a seguir.

    Un saludo.


    var jsondata = JSON.stringify({ user: user, pass: pass });
    
                $.ajax({
                    type: 'POST',
                    url: '/Inicio/Login',
                    contentType: 'application/json; charset=utf-8',
                    data: jsondata,
                    success: function (result) {
                        if (result) {
                            alert('Login correcto')
                        }
                        else {
                            alert('Contraseña o Usuario Incorrecto')
                        }
                    },
                    error: function (req, status, error) {
    
                        alert("Error de servidor " + error + " " + req + " " + status);
    
                    }
                });

    • Editado juanangr viernes, 10 de febrero de 2012 9:48
    viernes, 10 de febrero de 2012 9:43

Respuestas

  • MMmm...

    Ostras, lo veo todo bien, a no ser que el charset en el contentType le de error... Prueba de poner el contentType a 'application/json' simplemente sin especificar el charset. jQuery siempre usa UTF8 como charset.

    Si eso no funciona te tocará usar fiddler, para monitorizar exactamente que devuelve el servidor (especialmente que código http de error).

    PD: Si debes usar fiddler, ten presente que localhost no puede monitorizarlo. Por ello o bien te creas un nombre de servidor que apunte 127.0.0.1 en hosts, o bien usas localhost. (con el punto final) o bien usas ipv4.fiddler como nombre de servidor (no hace falta que tengas nada en hosts).

    Ya nos dirás...

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    • Marcado como respuesta Eder Costa viernes, 26 de octubre de 2012 14:24
    viernes, 10 de febrero de 2012 13:01
  • Probablemente el problema esté en el acceso a base de datos. Seguramente tu aplicación todavía no ha hecho ningún acceso a la BD en el momento de presentar la ventana de Login y es justo al llamar a /Inicio/Login cuando se realiza ese acceso. Esto es uno de los datos que cambian al pasar del entorno de desarrollo a la web publicada: la configuración de base de datos cambia, y por lo tanto puede ocurrir que se produzcan errores que en desarrollo no ocurrían. Si no puedes usar el debugger en el entorno de publicación, recurre al truco de añadir a tu proyecto un método de acción de prueba, que simplemente realice un acceso a base de datos y conteste "Ok". Déjalo abierto para acceso anónimo, para que no te salte el Login al llamarlo. Habilita en el web.config los errores remotos, y llama a mano a ese método desde un navegador. De esa manera, verás en pantalla cuál es el error que se produce al acceder a la base de datos y podrás solucionarlo.
    • Marcado como respuesta Eder Costa viernes, 26 de octubre de 2012 14:25
    domingo, 12 de febrero de 2012 8:26
  • Hola juanangr,

    ¿Tienes alojada la web en un subdirectorio de tu servidor? Es decir, si tu web la tienes en:

    http://www.miservidor.algo/una_carpeta_cualquiera

    Si este es el caso, te recomiendo que el javascript, lo renderices con razor y en la url le pongas algo parecido a esto:

      $.ajax({
                    type: 'POST',
                    url: '@Url.Action("Login", "Inicio")',
                    contentType: 'application/json; charset=utf-8',
                    data: jsondata,
    
    // ...

    De cualquier forma, siempre que se usen acciones de MVC, es una buena practica crear las direcciones con las extensiones para evitar problemas...

    Si no, puedes probar a usar firebug (plugin para Chrome y firefox) o fiddler para poder postear el error exacto tal cual viene del servidor.

    Un saludo,

    • Marcado como respuesta Eder Costa viernes, 26 de octubre de 2012 14:25
    martes, 14 de febrero de 2012 10:00

Todas las respuestas

  • MMmm...

    Ostras, lo veo todo bien, a no ser que el charset en el contentType le de error... Prueba de poner el contentType a 'application/json' simplemente sin especificar el charset. jQuery siempre usa UTF8 como charset.

    Si eso no funciona te tocará usar fiddler, para monitorizar exactamente que devuelve el servidor (especialmente que código http de error).

    PD: Si debes usar fiddler, ten presente que localhost no puede monitorizarlo. Por ello o bien te creas un nombre de servidor que apunte 127.0.0.1 en hosts, o bien usas localhost. (con el punto final) o bien usas ipv4.fiddler como nombre de servidor (no hace falta que tengas nada en hosts).

    Ya nos dirás...

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    • Marcado como respuesta Eder Costa viernes, 26 de octubre de 2012 14:24
    viernes, 10 de febrero de 2012 13:01
  • Probablemente el problema esté en el acceso a base de datos. Seguramente tu aplicación todavía no ha hecho ningún acceso a la BD en el momento de presentar la ventana de Login y es justo al llamar a /Inicio/Login cuando se realiza ese acceso. Esto es uno de los datos que cambian al pasar del entorno de desarrollo a la web publicada: la configuración de base de datos cambia, y por lo tanto puede ocurrir que se produzcan errores que en desarrollo no ocurrían. Si no puedes usar el debugger en el entorno de publicación, recurre al truco de añadir a tu proyecto un método de acción de prueba, que simplemente realice un acceso a base de datos y conteste "Ok". Déjalo abierto para acceso anónimo, para que no te salte el Login al llamarlo. Habilita en el web.config los errores remotos, y llama a mano a ese método desde un navegador. De esa manera, verás en pantalla cuál es el error que se produce al acceder a la base de datos y podrás solucionarlo.
    • Marcado como respuesta Eder Costa viernes, 26 de octubre de 2012 14:25
    domingo, 12 de febrero de 2012 8:26
  • Hola juanangr,

    ¿Tienes alojada la web en un subdirectorio de tu servidor? Es decir, si tu web la tienes en:

    http://www.miservidor.algo/una_carpeta_cualquiera

    Si este es el caso, te recomiendo que el javascript, lo renderices con razor y en la url le pongas algo parecido a esto:

      $.ajax({
                    type: 'POST',
                    url: '@Url.Action("Login", "Inicio")',
                    contentType: 'application/json; charset=utf-8',
                    data: jsondata,
    
    // ...

    De cualquier forma, siempre que se usen acciones de MVC, es una buena practica crear las direcciones con las extensiones para evitar problemas...

    Si no, puedes probar a usar firebug (plugin para Chrome y firefox) o fiddler para poder postear el error exacto tal cual viene del servidor.

    Un saludo,

    • Marcado como respuesta Eder Costa viernes, 26 de octubre de 2012 14:25
    martes, 14 de febrero de 2012 10:00