Перенаправление кадров в C # - PullRequest
2 голосов
/ 23 марта 2010

Я хотел бы выполнить перенаправление кадров в C # из моего управляемого модуля для IIS 7.
Когда я звоню context.Response.Redirect(@"http://www.myRedirect.org");, отображается правильная страница, а также адрес отображается в браузере. И это именно то, чего я не хочу.
Итак, я хочу что-то вроде:

private void OnBeginRequest(object sender, EventArgs e)
{
    HttpApplication app = (HttpApplication)sender;
    HttpContext context = app.Context;

    // make a frame redirect if a specified page is called
    if (context.Request.ServerVariable["HTTP_REFERER"].Equals(@"http://www.myPage.org/1.html"))
    {
        // perform the frame redirect here, but how?
        // so something like
        context.Response.Redirect(@"http://www.myRedirect.org");
        // but as I said that doesn't redirect as I want it to be
    }
}

Есть идеи по этому поводу?
EDIT: Я попробовал пример, поэтому у меня есть:

private void OnBeginRequest(object sender, EventArgs e)
{
    HttpApplication app = (HttpApplication)sender;
    HttpContext context = app.Context;

    // make a frame redirect if a specified page is called
    if (context.Request.ServerVariable["HTTP_REFERER"].Equals(@"http://www.myPage.org/1.html"))
    {
        // perform the frame redirect here, but how?
        context.Response.Write(@"<html>");
        context.Response.Write(@"<head>");
        context.Response.Write(@"</head>");
        context.Response.Write(@"<frameset rows=""100%,*"" framespacing=""0"" frameborder=""NO"" border=""0"">");
        context.Response.Write(@"<frame src=""http://www.myRedirect.org"" scrolling=""auto"">");
        context.Response.Write(@"</frameset>");
        context.Response.Write(@"<noframes>");
        context.Response.Write(@"<body>Some text...");
        context.Response.Write(@"</body>");
        context.Response.Write(@"</noframes>");
        context.Response.Write(@"</html>");
    }
}

Но это также не правильно перенаправляет. У меня все еще есть адрес перенаправления, показанный в моем браузере. Так есть еще идеи?

EDIT: Я явно ошибся. Код выше работает и делает то, что я хочу. Сначала это не сработало, потому что мой URL перенаправления делал что-то неожиданное.

1 Ответ

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

Для выполнения перенаправления фрейма вам необходимо отправить обратно HTML-код, содержащий набор фреймов с одним фреймом, с источником, установленным на http://www.myRedirect.org. Что касается сервера и браузера переадресация не произошла - только что получен HTML-код.

Выполнение Response.Redirect, как вы заметили, приведет к тому, что браузер выполнит новый запрос на новую страницу, показывая пользователю новый адрес в строке заголовка. Обычно он используется, когда страница фактически меняет свой адрес, но владельцы по-прежнему хотят, чтобы он также был доступен с исходного URL.

РЕДАКТИРОВАТЬ : Пример перенаправления фрейма HTML: http://en.wikipedia.org/wiki/URL_redirection#Frame_redirects

...