Как сделать server.transfer() с ответом.AddHeader(“обновить”, “секунды”) и не получить ошибку 404?

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

Вопрос

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

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

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

И a 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.

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top