C#.net Web应用程序重定向中的问题

时间:2011-07-20 19:53:22

标签: c# .net redirect httpmodule response.redirect

我对这个httpmodule进行了编码并将其正确添加到网站中,但是当我运行它时它会给我这个错误:

**页面未正确重定向

Firefox检测到服务器正在重定向 以永远不会完成的方式请求此地址。**

    using System;
    using System.Web;
    using System.Net;
    using System.Text;
    using System.IO;

    namespace CommonRewriter
    {
        public class ParseUrl : IHttpModule
        {
            public ParseUrl()
            {

            }

            public String ModuleName
            {
                get { return "CommonRewriter"; }
            }

            public void Init(HttpApplication application)
            {
                application.BeginRequest += new EventHandler(application_BeginRequest);
                application.EndRequest += new EventHandler(application_EndRequest);
            }


            private string ParseAndReapply(string textToParse)
            {
                string final = null;

                if (textToParse.Contains(".") && textToParse.Contains("example.com"))
                {
                    string[] splitter = textToParse.Split('.');
                    if (splitter[0].ToLower() != "www" &&(splitter[2].ToLower()).Contains("blog"))
                    {
                        final = ("www.example.com/Blog/?tag=/" + splitter[0]);
                    }
                    else { final = textToParse; }
                }
                else { final = textToParse; }

                return final;
            }

            void application_BeginRequest(object sender, EventArgs e)
            {
                HttpApplication application = (HttpApplication)sender;
                HttpContext context = application.Context;

                string req = context.Request.FilePath;
                context.Response.Redirect(ParseAndReapply(req));
                context.Response.End();
            }


            void application_EndRequest(object sender, EventArgs e)
            {

            }

            public void Dispose() { }

        }
    }

5 个答案:

答案 0 :(得分:1)

每个开始请求都会重定向,甚至是同一个网址。在调用context.Response.Redirect()之前,您需要检查以确保重定向。

答案 1 :(得分:0)

我认为问题在于:

 context.Response.Redirect(ParseAndReapply(req));  

BeginRequest事件表示创建任何给定的新请求。因此,在每次重定向中,它都会被调用。在您的代码中,它被重定向到一个新的请求,导致无限循环。试着重新考虑你的逻辑。

答案 2 :(得分:0)

除了其他答案中列出的回归问题外,看起来您正在重定向到相对路径(www.example.com/Blog/?tag = / ....)

试试http://www.example.com/Blog/?tag=/ ....

答案 3 :(得分:0)

application_BeginRequest中,您通过context.Response.Redirect(ParseAndReapply(req));

重定向 每个 请求

您应该在重定向之前检查条件是否为真,例如

string req = context.Request.FilePath;
if (req.Contains(".") && req.Contains("example.com"))
{
    context.Response.Redirect(ParseAndReapply(req))
    context.Response.End();
}

答案 4 :(得分:0)

如果ParseAndReply的参数不包含“example.com”,它将无限重定向到自身。

另一个注意事项:

if (textToParse.Contains(".") && textToParse.Contains("example.com"))

是多余的。 “example.com”将始终包含“。”