Al crear un sistema de gestión de contenido que incorpora jquery ajax en su GUI me he topado con un obstáculo. Parece que algunos clientes pasan demasiado tiempo pensando en lo que van a escribir y, por lo tanto, la sesión del servidor los cierra, ya que naturalmente no tienen ni idea de esto. Cuando intentan enviar los cambios, uso una llamada ajax al servidor para guardar los datos.Comprobación de la autorización http en mvc antes de la publicación de formulario ajax
Lo que esperaría que sucediera a continuación es que la aplicación del servidor MVC devolvería un estado "401 no autorizado". Entonces podría obtener mi objeto jquery ajax para pedirle al usuario que inicie sesión y luego volver a enviar los cambios una vez que el usuario haya sido autorizado.
Sin embargo, lo que realmente se devuelve de la aplicación MVC es un estado "302 Encontrado" y una URL de redirección a mi página de formulario de inicio de sesión. La página de formulario de inicio de sesión devuelve un código de estado "200 OK" y el objeto jquery ajax llama al evento de éxito que le dice al usuario que todo fue exitoso porque eso es lo que dice la aplicación MVC.
¿Hay alguna manera de que la aplicación MVC se reproduzca de la manera que creo que debería o debo modificar mis eventos jquery ajax para detectar la página de inicio de sesión?
Actualización:
he utilizado reflector para echar un vistazo en el código MVC y el atributo autorizar, devolver un NotAuthorizedResult el código que está por debajo (0x191 = 401)
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
context.HttpContext.Response.StatusCode = 0x191;
}
Estoy pensando que tal vez la Autorización de formularios HttpModule está viendo el 401 y forzando la redirección.
En .Net 4.0 (quizás otras versiones también, no sé), FormsAuthentication realiza la redirección en el controlador EndRequest.Descubrí que FormsAuth no procesó la respuesta si utilicé EndRequest, pero el uso del evento PreSendRequestHeaders funcionó mucho mejor (viene después de EndRequest). Gracias por este gran mensaje. – womp