Как перенаправить с HTTP на HTTPS в ASP.NET жизненный цикл страницы?

#asp.net #http #iis-7 #ssl #https

#asp.net #http #iis-7 #ssl #https

Вопрос:

У меня есть ASP.NET страница, на которой добавлено много серверных элементов управления. Когда пользователь посещает страницу с HTTP, мне нужно перенаправить запрос на использование HTTPS вместо этого. Элементы управления динамически загружаются в Init метод, и я делаю перенаправление в Load методе. Но это приводит к созданию цикла, который загружает элементы управления, а затем непрерывно перенаправляет.

Какое событие в жизненном цикле страницы я могу использовать для обработки перенаправления, которое позволяет избежать цикла?

Ответ №1:

Для этого вы должны использовать файл Gloabal.asax ..попробуйте этот код..

 protected void Application_BeginRequest(Object sender, EventArgs e)
{
        if ( !Request.IsSecureConnection)
        {
                string path = string.Format("https{0}", Request.Url.AbsoluteUri.Substring(4));

                Response.Redirect(path);
        }
}
  

Комментарии:

1. я понял, что вы все пытаетесь сказать. и главная проблема заключается в том, что я динамически контролирую загрузку. из-за этого все события запускаются при загрузке управления снова и снова. вот что делает перенаправление непрерывно, и это не может быть бровями.

2. да, вы должны предотвратить это, и тогда вы сможете добиться перенаправления

3. Кроме того, вы должны принять ответы на свои вопросы, если вы сочли их полезными (см. Там Есть Галочка), а также использовать upvotes. Это поможет вам получить больше ответов на ваши вопросы

4. спасибо, я должен это предотвратить. но это повторяется снова и снова, поэтому я не могу справиться с этим, потому что страница не отправляется обратно .conrols events r запускает событие загрузки страницы для каждого элемента управления на этом page..so немного сбивая с толку, здесь я

Ответ №2:

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

Комментарии:

1. На самом деле вы можете делать это где угодно в жизненном цикле, я обычно делаю это в OnInit.

2. я понял, что вы все пытаетесь сказать. и главная проблема заключается в том, что я динамически контролирую загрузку. из-за этого все события запускаются при загрузке управления снова и снова. вот что делает перенаправление непрерывно, и это не может быть бровями.

Ответ №3:

Для этого следует использовать IIS Rewrite, если он доступен. Правило:

 <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTPS}" pattern="^OFF$" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
</rule>
  

Ответ №4:

Вы должны перенаправить в начале инициализации страницы, если не хотите, чтобы элементы управления загружались. Я использую что-то вроде этого для перенаправления (я просто выдаю нужный мне код):

 protected void RedirectPage(string redirectUrl)
{
    // Redirect the page, nothing should be shown in this case
    if (redirectUrl.StartsWith("~"))
        redirectUrl = ResolveClientUrl(redirectUrl);
    Response.Write("<head id="pageheader">");
    Response.Write("</head>");
    Response.Write("<body onload="window.location = '"   redirectUrl   "';">");
    Response.Write("</body>");
    Response.End();
}
  

Комментарии:

1. что ж, спасибо за ответ. Я использую динамическую маршрутизацию и динамически загружаю элементы управления, и при загрузке каждого элемента управления в глобальном asax begin_request выполняется повторно, не только это событие загрузки страницы запускается при загрузке элемента управления. так что мне становится очень сложно

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

3. я обнаружил, что когда я перенаправляю, он перенаправляет и снова начинает загружать элементы управления, в течение этого времени он снова перенаправляет и снова начинает загружать элементы управления. вот почему он никогда не завершается. я пробовал на глобальном asax, страница init load preinit не работает ..: C

4. Я предположил, что вы всегда хотели перенаправить на https, когда находили пользователя, подключенного через http. В этом случае вы должны проверить, находится ли пользователь на http, и только затем перенаправить на https. Когда вы будете перенаправлять пользователя на https?

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