Como fazer um server.Transfer () com uma resposta.addheader ("atualizar", "segundos") e não obter um erro 404?

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

Pergunta

Então este é o cenário:

Eu tenho uma classe base para todas as páginas controladas por login:

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");
        }
    }
}

E a regularpage.aspx página que herde da classe base:

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

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

Agora digamos que o URL original era http: //localhost/regularpage.aspx e essa Session.Timeout = 5. O problema aparece quando a atualização acontece após a transferência. Estou recebendo um 404 Not Found erro e o URL muda para http: // localhost/305. Notar que 5 * 60 + 5 = 305.

Você sabe por que isso está acontecendo? Tem uma solução?

PD: Eu uso transferência porque preciso acessar algumas propriedades do regularPage.aspx no outropage.aspx, talvez você possa fornecer outra solução para isso também.

Foi útil?

Solução

Há muito pouco motivo para ligar para base.page_load Se tudo o que você vai fazer é ligar para o server.transfer. O que exatamente você está tentando realizar? Se você está apenas acessa algumas propriedades necessárias para abstrair isso em alguma lógica de negócios que não depende do objeto da página.

Isso também é o que está causando o problema 404 ... para que isso aconteça, o problema deve estar na saída renderizada da página (confira). Parece que você está cortando uma página logo após a tag meta-refresch e, em seguida, iniciando uma nova página e asp.net está apenas despejando tudo no mesmo fluxo de resposta. Em suma, você está fazendo errado. :) Você pode consertar isso com uma resposta bem posicionada.clear (), mas esse não é o problema real aqui ... e você perderá sua tag de atualização.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top