Como hacer un Server.Transfer () con un Response.AddHeader ( “refresh”, “segundo”) y no conseguir un error 404?

StackOverflow https://stackoverflow.com/questions/2456243

Pregunta

por lo que este es el escenario:

Tengo una clase base para todas las páginas con acceso controlado:

public class SessionControlledPage : Page
{
    protected virtual void Page_Load(Object sender, EventArgs e)
    {
        Response.AddHeader("Refresh", Convert.ToString(Session.Timeout * 60 + 5));
        if (Session.IsNewSession)
        {
            Response.Redirect("~/login.aspx");
        }
    }
}

Y una página regularpage.aspx que inherints de la clase base:

public partial class RegularPage : SessionControlledPage
{
    override protected void Page_Load(Object sender, EventArgs e)
    {
        base.Page_Load(sender, e);

        Server.Transfer("~/otherpage.aspx");
    }
}

Ahora digamos que la URL original era http: //localhost/regularpage.aspx y que Session.Timeout = 5. El problema aparece cuando la actualización ocurre después de la transferencia se lleva a cabo. Estoy recibiendo un error 404 Not Found y los cambios de URL para http: // localhost / 305 . Observe que 5 * 60 + 5 = 305.

¿Sabe por qué está sucediendo esto? tiene una solución?

PD:. Yo uso la transferencia porque necesito tener acceso a algunas propiedades de regularpage.aspx en otherpage.aspx, tal vez usted podría ofrecer otra solución para esto también

¿Fue útil?

Solución

Hay muy pocas razones para llamar base.Page_Load si todo lo que vamos a hacer es llamar a Server.Transfer a continuación. ¿Qué estás tratando de lograr? Si acaba de acceder a algunas de las propiedades que necesita para abstraer esto en una lógica de negocio que no se basa en el objeto de página.

Esto es también lo que está causando el problema 404 ... para que esto suceda, el problema tiene que estar en el resultado representado de la página (comprobarlo). Parece que usted está cortando una página justo después de la etiqueta meta-refresh y luego iniciar una nueva página y ASP.NET es simplemente vertido todo en la misma secuencia de respuesta. En resumen, lo estás haciendo mal. :) Usted puede ser capaz de solucionar este problema con un Response.Clear bien colocado (), pero ese no es el verdadero problema aquí ... y que le pierde su etiqueta de actualización.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top