Вы должны конвертировать это из VB.NET в C #, но это то, что я использую на своих сайтах:
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
Это больше кода, чем некоторые другие методы, но есть причина для этого. Этот метод будет перенаправлять только тогда, когда он не находится в режиме, в котором он должен быть. И когда он выполняет перенаправление, он выполняет перенаправление 301 (постоянное). Преимущество заключается в том, что поисковые системы будут следовать перенаправлению 301, и это предотвратит любую возможность их индексации одной и той же страницы дважды (в режиме http и https). Вы можете сравнить это с поведением по умолчанию Response.Redirect (302 временное перенаправление), которое, например, Google не обрабатывает аналогичным образом. Они не будут изменять свой индекс на основе временного перенаправления.
Итак, если вы находитесь на странице, которую хотите зашифровать с помощью SSL, назовите ее так:
SetSSL (True)
В противном случае:
SetSSL (False)
И если вам действительно нужно, чтобы это применялось глобально, я бы вызвал SetSSL (True) в Application_BeginRequest вашего global.asax. Помните, что SSL немного замедлит работу. По этой причине я обычно очень избирателен при переключении между http и https. На самом деле, из десятков сайтов, которые я разработал, только два используют SSL на всем сайте.