C#中的帧重定向

时间:2010-03-23 08:47:12

标签: c# iis-7 httpcontext ihttpmodule

我想在我的托管模块中为IIS 7执行C#中的帧重定向。
当我拨打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
    }
}

有关于此的任何想法?
修改: 我试过这个例子,所以我有:

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

但是这也没有正确重定向。我仍然在浏览器中显示重定向地址。那么还有其他想法吗?

编辑: 我显然犯了一个错误。上面的代码工作并做我想要的。它首先不起作用,因为我的重定向网址正在做出意想不到的事情。

1 个答案:

答案 0 :(得分:1)

要执行frame redirect,您需要发送包含带有单个框架的框架集的HTML代码,并将其源设置为http://www.myRedirect.org。就服务器和浏览器而言,没有发生重定向 - 它只是收到了一些HTML代码。

如您所见,执行Response.Redirect将导致浏览器向新页面发出新的新请求,向用户显示标题栏中的新地址。它通常用于页面实际更改其地址时,但所有者仍希望它也可以从原始URL访问。

编辑:HTML框架重定向示例:http://en.wikipedia.org/wiki/URL_redirection#Frame_redirects