2010-11-22 10 views
6

Tengo una aplicación MVC de ASP.NET y estoy utilizando la autenticación de formularios. Cuando se va a una página que requiere autenticación, lo que significa que hay un atributo [Autorizar] en la acción del controlador, redirige al usuario a la página de inicio de sesión con una URL de retorno como http://localhost/Login?ReturnUrl=/MyAuthorizedUrl.FormsAuthentication.GetRedirectUrl siempre devuelve el valor predeterminado

Así es como mi configuración es la configuración:

<authentication mode="Forms"> 
    <forms loginUrl="~/Login" timeout="2880" defaultUrl="~/" /> 
</authentication> 

Así es como me estoy poniendo la URL de redireccionamiento:

var url = FormsAuthentication.GetRedirectUrl(model.Email, model.RememberMe); 

Esto siempre devuelve la URL por defecto.

¿Qué está causando esto?

Respuesta

7

Supongo que le gustaría obtener "MyAuthorizedUrl" como resultado de FormsAuthentication.GetRedirectUrl?

Deberá insertar un campo de entrada oculto que refleje ReturnUrl=/MyAuthorizedUrl, p. Ej. name="ReturnUrl" value="/MyAuthorizedUrl".

La razón es que la página de inicio de sesión se solicita a través de GET con el ReturnUrl, pero el POST va al /Login (sin ningún parámetro).

Como alternativa, cambie el atributo de acción de formulario para incluir el parámetro ReturnUrl.

5

Si su formulario de entrada:

@using (Html.BeginForm 
(
    "Login", 
    "Account", 
    new { ReturnUrl = Request.QueryString["ReturnUrl"] }, 
    FormMethod.Post 
)) 

reemplazar "Login" con su nombre de la acción y "Cuenta" con su nombre de controlador.

Cuestiones relacionadas