Перенаправление страницы ASP.NET - PullRequest
1 голос
/ 22 августа 2010

Слово, которое нужно сказать. Это лучшее сообщество .NET когда-либо. Так держать!

В последнее время у меня возникла проблема: мне удалось найти для нее 2 решения, и мне интересно, какое из них выбрать.

Вот вопрос:

Когда пользователь запрашивает мой сайт (www. .com), я собираюсь перенаправить его на (www. .com / en), потому что это многоязычный сайт.

Я использую .NET маршрутизацию к этому.

В Page_Load страницы default.aspx я проверяю, доступен ли язык из коллекции маршрутизации, я не перенаправляю. Если он недоступен, я перенаправляю на (www.___.com/en). Вот код:

    if (Page.RouteData.Values.Count == 0)
    {
        if (SessionManager.IsUserAuthenticated)
        {
            //Redirect To User HomePage for his Main Language
            Page.Response.Redirect(UserManager.GetUserMainPageWhenLoggedIn(SessionManager.LoggedUser.LanguageID,true));                                
        }
        else
        {
            Page.Response.Redirect(String.Format("~/{0}", Cultures.en.ToString()), true);
            Helpers.SetCulture(Cultures.en.ToString());
        }

    }

Я использую Response.Redirect для этого. Теперь, если я установлю в методе End The Response параметр метода, он выдаст исключение, чтобы я мог обработать его через

 try
    {
       this.InitializeLayout();
    }
    catch (ThreadAbortException ex)
    {

    }
    catch (Exception ex)
    {
        ExceptionManager.LogException(ex);
    }

Если я не завершу отклик, страница выполнит весь жизненный цикл, перенаправит, а затем сделает это снова, что приведет к двойному выполнению страницы.

Моя главная задача - не запускать страницу 2 раза, чтобы минимизировать обработку (если сайт перегружен большим трафиком). Если я завершу ответ, будет сгенерировано ThreadAbortExeption, и я думаю, что это не очень хорошо для сайта (я могу его поймать и не регистрировать).

Что вы думаете, ребята?

Ответы [ 2 ]

1 голос
/ 22 августа 2010

Вы можете избежать генерирования исключения, передав, как вы сказали, значение false параметру endResponse. Если вы хотите избежать выполнения страницы, вы также можете вызвать HttpContext.Current.ApplicationInstance.CompleteRequest (); , который должен пропустить остальную часть кода на вашей странице.

Обратите внимание, что методы postback и render будут по-прежнему выполняться. Если вы хотите избежать этого, вы должны явно включить код, чтобы игнорировать их. Отличный пример того, как это сделать, переопределив методы RaisePostBackEvent и Render , можно найти здесь: -> http://www.c6software.com/articles/ThreadAbortException.aspx

0 голосов
/ 22 августа 2010

Вы можете использовать обработчик событий Application_BeginRequest в global.asax файле или HttpHandler для перенаправления.В обоих случаях вы избежите двух звонков.

Я бы также предложил использовать server.Transfer вместо response.redirect.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...