#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. Еще одна вещь, вы должны поместить это в инициализацию страницы, а не в инициализацию элемента управления.