tag route page net for data asp all asp.net asp.net-mvc forms-authentication

asp.net - route - ¿Cómo eliminar returnurl de url?



select asp-for asp-items (11)

Quiero eliminar "returnurl = / blabla" de la barra de direcciones cuando un usuario quiere acceder a una página de inicio de sesión requerida. Porque estoy tratando de redirigir al usuario a una página estática después de iniciar sesión para hacer algunas selecciones.

¿Cómo puedo hacer eso?


Agregue esto a su archivo Global.asax.

public class MvcApplication : HttpApplication { private const String ReturnUrlRegexPattern = @"/?ReturnUrl=.*$"; public MvcApplication() { PreSendRequestHeaders += MvcApplicationOnPreSendRequestHeaders; } private void MvcApplicationOnPreSendRequestHeaders( object sender, EventArgs e ) { String redirectUrl = Response.RedirectLocation; if ( String.IsNullOrEmpty(redirectUrl) || !Regex.IsMatch( redirectUrl, ReturnUrlRegexPattern ) ) { return; } Response.RedirectLocation = Regex.Replace( redirectUrl, ReturnUrlRegexPattern, String.Empty ); }


Agregue una etiqueta de ubicación a su web.config . Si su página está en un subdirectorio, agregue web.config al subdirectorio.

<location path="ForgotPassword.aspx"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location>

ASP pasará por alto la adición de la ReturnUrl consulta ReturnUrl y la dirección para iniciar sesión.


Como señaló RPM1984, no es necesario que redirija al usuario a la URL especificada después de iniciar sesión.

Si es imprescindible que elimines el parámetro ReturnUrl , hay un par de opciones. Probablemente, lo más fácil sea que en su página web de inicio de sesión / controlador verifique la existencia de un parámetro ReturnUrl en la colección Request.QueryStrings . Si existe, podría redirigir a la página de inicio de sesión, pero sin ReturnUrl .

Otra opción sería crear una implementación personalizada para FormsAuthenticationModule , que es la clase que maneja la autenticación de un usuario en función de su ticket de autenticación de formulario y es responsable de redirigir a los usuarios no autorizados a la página de inicio de sesión. Desafortunadamente, los FormsAuthenticationModule clase FormsAuthenticationModule no son virtuales, por lo que no puede crear una clase derivada y anular los métodos necesarios, pero la buena noticia es que la clase es bastante simple: tal vez 100-200 líneas de código en total, y el uso Reflector puede crear rápidamente su propia clase personalizada FormsAuthenticationModule . Si sigue esta ruta (que no recomendaría), todo lo que tendría que hacer sería extraer el código en el método OnLeave que ReturnUrl parámetro ReturnUrl . (Además de modificar esta clase, también necesitaría configurar su archivo Web.config para que su aplicación use su clase FormsAuthenticationModule personalizada en lugar de la de .NET Framework).

Feliz programacion!


Crear un atributo de Autorización personalizado

public class CustomAuthorizeAttribute : AuthorizeAttribute { public override void OnAuthorization( AuthorizationContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (!filterContext.HttpContext.User.Identity.IsAuthenticated) { string loginUrl = "/"; // Default Login Url filterContext.Result = new RedirectResult(loginUrl); } } }

luego úsalo en tu controlador

[CustomAuthorizeAttribute] public ActionResult Login() { return View(); }


Esta es la naturaleza de la Autenticación de formularios . (que estoy adivinando que estás usando).

Es decir, cuando accede a una página que requiere autenticación, ASP.NET lo redireccionará a la página de inicio de sesión, transfiriendo ReturnUrl como parámetro para que pueda volver a la página de la que vino después de iniciar sesión.

Eliminar esta funcionalidad rompería la semántica y el diseño de la Autenticación de formularios. (IMO)

Mi sugerencia: si no la necesitas, no la uses .

Estoy intentando redirigir al usuario a una página estática después de iniciar sesión para hacer algunas selecciones.

Un pedazo de pastel: después de haber iniciado sesión, en lugar de realizar FormsAuthentication.RedirectFromLoginPage (que usa ese parámetro ReturnUrl QueryString), simplemente use FormsAuthentication.SetAuthCookie y redirija a donde quiera.


Puede usar HttpUtility.ParseQueryString para eliminar ese elemento. Si usa VB.NET, este código hace esto

Dim nvcQuery As NameValueCollection Dim strQuery As String = "" If Not IsNothing(Request.QueryString("ReturnUrl")) Then If Request.QueryString("ReturnUrl").Length Then nvcQuery = HttpUtility.ParseQueryString(Request.QueryString.ToString) For Each strKey As String In nvcQuery.AllKeys If strKey <> "ReturnUrl" Then If strQuery.Length Then strQuery += "&" strQuery += strKey + "=" + nvcQuery(strKey) End If Next If strQuery.Length Then strQuery = "?" + strQuery If Request.CurrentExecutionFilePath <> "/default.aspx" Then Response.Redirect(Request.CurrentExecutionFilePath + strQuery) Else Response.Redirect("/" + strQuery) End If Response.Write(Server.HtmlEncode(strQuery)) End If End If

Me gustaría poner esto en el evento Page.Init: obviamente tendrá que cambiar el "/default.aspx" para que coincida con la URL de su página de inicio de sesión.


Si desea eliminar returnURL de la solicitud y redireccionar a una ruta específica, puede seguir estos pasos.

Primero, obtenga el contexto actual, verifique si el usuario está autenticado y finalmente redirija la ruta actual.

HttpContext context = HttpContext.Current; //verify if the user is not authenticated if (!context.User.Identity.IsAuthenticated) { //verify if the URL contains ReturnUrl if (context.Request.Url.ToString().Contains("ReturnUrl")) { //redirect the current path HttpContext.Current.Response.Redirect("~/login.aspx"); } }

Puse este código en el método Page_Load de mi clase Login.aspx.cs


si está usando asp.net control loginstatus luego haga clic en iniciar sesión control de estado presione f4 (para propiedades) en la sección de comportamiento podemos ver LogOutAction allí seleccione Volver a la página de inicio de sesión.

Nota: Para implementarlo correctamente, debe tener una página de inicio de sesión con el nombre login.aspx


Sencillo...

[AllowAnonymous] public ActionResult Login() { return View(); } [AllowAnonymous] public ActionResult LoginRedirect(){ return RedirectToAction("Login"); }

Webconfig

<authentication mode="Forms"> <forms loginUrl="~/Account/LoginRedirect" timeout="2880" /> </authentication>


protected void LoginControl_LoggedIn(object sender, EventArgs e) { Response.Redirect("~/selection.aspx"); }


void Application_BeginRequest(object s, EventArgs e) { // ................ // strip return Return Url if (!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]) && Request.Path.IndexOf("login.aspx")!=-1) System.Web.HttpContext.Current.Response.Redirect("~/login.aspx");