2009-08-17 6 views

Répondre

3

Merci Silky pour m'avoir initié.

J'ai fini avec

var url = String.Format("https://{0}{1}", 
     Request.ServerVariables["HTTP_HOST"] , 
     ResolveUrl("~/Login.aspx")); 

     Response.Redirect(url); 
+3

Notez que vous pouvez obtenir l'hôte via: this.Request.Url.Host –

+0

probablement préférable de dodécuter pour DNSSafeHost dans ce cas –

0

J'aime appeler cette méthode à partir Page_Load dans une page où je veux forcer https. Plus précisément, à partir de n'importe quelle page où l'utilisateur peut entrer un mot de passe, comme les pages de connexion, d'enregistrement et de réinitialisation du mot de passe.

protected void ForceHTTPS() 
{ 
    string serverName = Request.ServerVariables["SERVER_NAME"]; 
    string pagePath = Page.AppRelativeVirtualPath.Replace("~", ""); 
    string queryString = Request.Url.Query; 
    if (serverName != "localhost" && !Request.IsSecureConnection) 
    { 
     Response.Redirect("https://" + SECURE_DOMAIN + pagePath + queryString); 
    } 
} 

La raison pour laquelle j'utilise un pré-défini constante pour SECURE_DOMAIN plutôt que de le lire sur des Request.ServerVariables [ « SERVER_NAME »] est que notre certificat SSL ne fonctionne que s'il y a un « www. » sur le début du nom de domaine, je veux donc m'assurer de forcer ce nom de domaine aussi au cas où l'utilisateur aurait navigué sur le site en utilisant le nom de domaine sans www., ou potentiellement utilisé un autre alias de nom de domaine.

Et je ne fais pas la redirection si le nom du serveur est "localhost" de sorte que le code fonctionne également dans mon environnement de développement lorsqu'il est exécuté à partir de Visual Studio.

Questions connexes