Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Проблема редиректа на Мастерхост.


Автор: vchilikov 27.4.2009, 10:28
Пользуюсь хостингом Мастерхост. Столкнулся со странной проблемой. У меня на сайте есть раздел портфолио. Там вывешены мои работы и ссылки на них, через редирект. Н-р: /goto/www.tumnews.ru.    Для редиректа использую следующий код в global.asax.cs:
Код

        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            HttpContext context = HttpContext.Current;
            string currentLocation = context.Request.Path.ToLower();
            if (currentLocation.IndexOf("goto") > -1)
            {
                context.Response.Redirect("http://"+ currentLocation.Remove(0,6));
            }
        }

Этот редирект у меня на локальной машине работает, а на хостинге нет. Написал в тех поддержку мне отписались искать проблему у себя.

В чем может быть проблема?

Автор: Zakonnic 28.4.2009, 09:53
Этот код еще не такие чудеса творить может. Например, при использовании виртуальных каталогов. А уж если страница будет содержать goto в названии, то вообще атас  smile 

Можно сделать так:
Код

        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            string currentLocation = Request.Path.ToLower();
            int gotoPos = currentLocation.IndexOf("/goto/");

            if (gotoPos > -1)
            {
                Response.Redirect("http://"+ currentLocation.Substring(gotoPos + 6));
            }
        }


А можно и подумать над созданием более функционального PageController-а или переходом на MVC.

Автор: vchilikov 29.4.2009, 00:02
Спасибо за код, да действительно в моем коде, были недочеты с goto, я их устранил. Но это не решает основной проблемы, код на локальном сервере работает, а на masterhost нет.
Мне предложили в тех поддержке переписать код:
Код

Возможно, обработка не завершается и необходимо закрыть:

--.Response.StatusCode = 301;
--.Response.End();

Вот пример :

protected void Application_BeginRequest(Object sender, EventArgs e) {
   HttpApplication app = sender as HttpApplication;

   if (app != null)
   {
       string requestUrl = app.Request.Url.PathAndQuery;

       if (String.Equals(requestUrl, oldUrl))
       {
           app.Context.Response.RedirectLocation = newUrl;
           app.Context.Response.StatusCode = 301;
           app.Context.Response.End();
       }
   }
}

Vы не даем консультаций по вопросам программирования, веб-дизайна, настроек скриптов и программ. Мы лишь можем ответить на Ваши конкретные вопросы, связанные с работоспособностью наших серверов, и нашего программного обеспечения. 

Но этот код тоже не работает, подскажите что делать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)