He hecho esto con un HTTPModule para que no tiene que preocuparse por poner el código en cada página maestra (si tiene más de una). Esta versión también desactiva la redirección de localhost para que no tengas que tener SSL en tu propia máquina. Básicamente que hacer un nuevo módulo HTTP como esto:
Public Class RedirectToHttpsModule
Implements IHttpModule
Public Sub Dispose() Implements IHttpModule.Dispose
End Sub
Public Sub Init(ByVal context As HttpApplication) Implements IHttpModule.Init
AddHandler context.BeginRequest, AddressOf context_BeginRequest
End Sub
Private Sub context_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim application As HttpApplication = TryCast(sender, HttpApplication)
If Not application.Request.IsSecureConnection And Not application.Request.IsLocal Then
application.Response.Redirect(application.Request.Url.ToString().Replace(application.Request.Url.Scheme, "https"))
End If
End Sub
End Class
También hay que añadir la línea correspondiente en web.config para el HTTPModule:
<httpModules>
<add type="RedirectToHttpsModule" name="RedirectToHttpsModule" />
</httpModules>
No es la mejor de las ideas. Está haciendo un redireccionamiento del lado del cliente a la página de llamadas. Si no hay SSL por el motivo que sea (sin certificado o certificado incorrecto), ingresará en un ciclo recursivo. Una mejor opción sería redirigir a una página de error ya que el usuario no debe ingresar a un sitio/página de seguridad, a menos que el código lo haga incorrectamente o que esté jugando con la URL. –
Esto funciona bien con la advertencia de que el método string.replace cambiará todas las apariciones de "http: //" a "https: //", no solo el esquema inicial. Es decir. puede interferir con los parámetros de cadena de consulta. –
@Daniel si tiene los caracteres: o/en sus cadenas de consulta, entonces tendrá otros problemas de los que preocuparse;) –