Как сделать server.transfer () с Response.AddHeader («обновить», «секунд») и не получить ошибку 404? - PullRequest
0 голосов
/ 16 марта 2010

так что это сценарий:

У меня есть базовый класс для всех контролируемых логином страниц:

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

И regularpage.aspx страница, которая наследуется от базового класса:

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

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

Теперь предположим, что исходный URL был http://localhost/regularpage.aspx и Session.Timeout = 5. Проблема появляется, когда обновление происходит после передачи. Я получаю ошибку 404 Not Found, и URL-адрес изменяется для http://localhost/305. Обратите внимание, что 5 * 60 + 5 = 305.

Знаете ли вы, почему это происходит? есть решение?

PD: я использую перевод, потому что мне нужно получить доступ к некоторым свойствам Regularpage.aspx на otherpage.aspx, возможно, вы могли бы предложить и другое решение для этого.

1 Ответ

1 голос
/ 17 марта 2010

Существует очень мало причин для вызова base.Page_Load, если все, что вы собираетесь сделать, - это вызвать Server.Transfer. Что именно вы пытаетесь достичь? Если вы просто получаете доступ к некоторым свойствам, вам нужно абстрагировать это в некоторую бизнес-логику, которая не зависит от объекта Page.

Это также является причиной проблемы 404 ... для того, чтобы это произошло, проблема должна быть в отображаемом выводе страницы (проверьте это). Похоже, что вы обрезаете одну страницу сразу после тега meta-refresh и затем запускаете новую страницу, а ASP.NET просто выгружает все это в один и тот же поток ответов. Короче говоря, вы делаете это неправильно. :) Возможно, вам удастся это исправить с помощью хорошо расположенного Response.Clear (), но здесь проблема не в этом ... и вы потеряете тег обновления.

...