C # Comment déterminer si HTTPS

Comment déterminer et forcer les utilisateurs à afficher mon site Web à l’aide du protocole HTTPS uniquement? Je sais que cela peut être fait via IIS, mais je veux savoir comment cela se fait par programmation.

Vous pouvez écrire un HttpModule comme ceci:

 ///  /// Used to correct non-secure requests to secure ones. /// If the website backend requires of SSL use, the whole requests /// should be secure. ///  public class SecurityModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication application) { application.BeginRequest += new EventHandler(application_BeginRequest); } protected void application_BeginRequest(object sender, EventArgs e) { HttpApplication application = ((HttpApplication)(sender)); HttpRequest request = application.Request; HttpResponse response = application.Response; // if the secure connection is required for backend and the current // request doesn't use SSL, redirecting the request to be secure if ({use SSL} && !request.IsSecureConnection) { ssortingng absoluteUri = request.Url.AbsoluteUri; response.Redirect(absoluteUri.Replace("http://", "https://"), true); } } } 

{use SSL} est une condition nécessaire pour utiliser SSL ou non.

EDIT : et bien sûr, n’oubliez pas d’append une définition de module à un web.config :

     ...   

Un peu codé mais direct!

 if (!HttpContext.Current.Request.IsSecureConnection) { Response.Redirect("https://www.foo.com/foo/"); } 

Vous devez convertir ceci de VB.NET en C #, mais voici ce que j’utilise dans mes sites:

 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 Ssortingng = "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 Ssortingng = "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 

C’est plus de code que certaines des autres techniques, mais il y a une raison à cela. Cette méthode ne redirige que lorsqu’elle n’est pas dans le mode dans lequel elle devrait être. Et lorsqu’elle effectue une redirection, elle effectue une redirection 301 (permanente). L’avantage réside dans le fait que les moteurs de recherche suivront la redirection 301, ce qui leur évitera d’indexer deux fois la même page (en mode http et https). Vous pouvez comparer cela au comportement par défaut de Response.Redirect (redirection temporaire 302) que Google, par exemple, ne traite pas de la même manière. Ils ne changeront pas leur index en fonction d’une redirection temporaire.

Donc, si vous êtes sur une page pour laquelle vous voulez être crypté SSL, appelez-le comme ceci:

SetSSL (True)

Autrement:

SetSSL (False)

Et si vous avez vraiment besoin que cela soit appliqué globalement, j’appellerai SetSSL (True) dans Application_BeginRequest de votre global.asax. Attention, SSL ralentira un peu les choses. Pour cette raison, je suis généralement très sélectif lors du basculement entre http et https. En fait, sur des dizaines de sites que j’ai développés, seuls deux utilisent le protocole SSL sur l’ensemble du site.

Cet article traite des requêtes entrantes et sortantes de SSL. Parfois, vous ne voulez pas que l’utilisateur voie une page en SSL car il grave les cycles de proc pour les pages qu’il n’est pas nécessaire de sécuriser.

http://weblogs.asp.net/kwarren/archive/2005/07/08/418541.aspx

IIR vous pouvez vérifier la demande (HttpContext.Current.Request) pour le domaine et vérifier ensuite le protocole utilisé (http, https, ftp, etc.)

Vous pouvez également configurer une règle de réécriture dans votre web.config sous la balise system.webServer . par exemple: