Проблема в C # .net веб-приложения Перенаправление - PullRequest
1 голос
/ 20 июля 2011

Я закодировал этот http-модуль и правильно добавил его на сайт, но он выдает мне эту ошибку при запуске:

** Страница не перенаправляет должным образом

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 ]

1 голос
/ 20 июля 2011

Каждый начальный запрос перенаправляет даже на один и тот же URL.Вам нужно проверить, чтобы убедиться, что перенаправление необходимо, прежде чем звонить context.Response.Redirect().

0 голосов
/ 20 июля 2011

Если аргумент для ParseAndReply не содержит «example.com», он будет бесконечно перенаправлять на себя.

Еще одно примечание:

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

является избыточным. «example.com» всегда будет содержать «.»

0 голосов
/ 20 июля 2011

В 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();
}
0 голосов
/ 20 июля 2011

В дополнение к проблеме повторения, указанной в других ответах, похоже, что вы перенаправляете на относительный путь (www.example.com/Blog/?tag = / ....)

Попробуйте http://www.example.com/Blog/?tag=/....

0 голосов
/ 20 июля 2011

Я думаю, что проблема в:

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

Событие BeginRequest сигнализирует о создании любого данного нового запроса. Так что в каждом редиректе это вызывается. И в вашем коде он перенаправлен на новый запрос, который вызывает бесконечный цикл. Попробуйте пересмотреть свою логику.

...