Вот простое решение в VB.NET:
Imports System.Web.HttpContext
Public Shared Sub SetSSL(Optional ByVal bEnable As Boolean = False)
If bEnable Then
If Not Current.Request.IsSecureConnection Then
Dim strHTTPS As String = "https://www.mysite.com"
Current.Response.Clear()
Current.Response.Status = "301 Moved Permanently"
Current.Response.AddHeader("Location", strHTTPS & Current.Request.RawUrl)
Current.Response.End()
End If
Else
If Current.Request.IsSecureConnection Then
Dim strHTTP As String = "http://www.mysite.com"
Current.Response.Clear()
Current.Response.Status = "301 Moved Permanently"
Current.Response.AddHeader("Location", strHTTP & Current.Request.RawUrl)
Current.Response.End()
End If
End If
End Sub
Использование:
'Enable SSL
SetSSL(True)
'Disable SSL
SetSSL(False)
Вы можете добавить это в Page_Load каждой из ваших страниц. Или вы можете сделать что-то, как я, и создать список папок или страниц, которые вы хотите защитить в вашем global.asax, и соответственно установить SSL в методе Application_BeginRequest. И это будет работать с относительными ссылками, и статус страницы HTTP или HTTPS всегда будет таким, какой вы говорите, чтобы он был в коде.
У меня есть этот код на нескольких сайтах. Но, например, если вы перейдете на https://www.techinsurance.com, вы заметите, что он автоматически перенаправляет на http, потому что домашняя страница не нуждается в защите. И наоборот произойдет, если вы попытаетесь перейти на страницу, которая должна быть защищена, например http://www.techinsurance.com/quote/login.aspx
Вы можете заметить, что я использую 301 (постоянный) перенаправления. Дополнительным преимуществом здесь является то, что поисковые системы будут обновлять свой индекс на основе кода перенаправления 301.