2010-06-18 9 views
4

J'ai un serveur Web exécutant IIS 6, .NET MVC avec un seul nom de domaine. Le site utilise la réécriture d'URL pour produire des URL comme:.NET-MVC - Réécrire les URL + certaines URL via SSL?

domain.com/controller/action

Je voudrais forcer un (1) contrôleur à utiliser SSL (les autres devraient fonctionner sans SSL). Comment dois-je l'implémenter?

Répondre

4

Décorez le contrôleur qui a besoin de SSL avec RequireHttpsAttribute.

[RequireHttps] 
public class SecureController : Controller 
{ 
    ... 
} 

Bien, vous pouvez préférer une version personnalisée qui ne tient pas compte des demandes de ce localhost si vous utilisez Cassini pour le débogage.

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] 
public class RemoteRedirectToHttpsAttribute : RequireHttpsAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext == null) 
     { 
      throw new ArgumentNullException("filterContext"); 
     } 

     if (filterContext.HttpContext != null && (filterContext.HttpContext.Request.IsLocal || filterContext.HttpContext.Request.IsSecureConnection)) 
     { 
      return; 
     } 

     filterContext.Result = new RedirectResult(filterContext.HttpContext.Request.Url.ToString().Replace("http:", "https:")); 
    } 
} 
+0

J'utilise déjà un attribut RequireSSL personnalisé. Cependant, mon site Web (IIS) n'est pas encore configuré pour SSL. Et je suis seulement en mesure de configurer en définissant «Sécurité de répertoire» pour l'ensemble du site Web. Ou est-ce que cela ** ne ** désactivera pas automatiquement les requêtes 'http' normales? – Ropstah

+0

@ropstah - si vous utilisez cet attribut sur un contrôleur/une action (autre qu'une connexion locale), il redirigera vers une requête sécurisée. En outre, vous devriez noter que la demande initiale devrait vraiment être un GET, pas un POST. Si la première requête à une action protégée est un POST, cela ne fonctionnera pas puisque la redirection sera un GET à la même URL (sauf en utilisant https à la place). – tvanfosson

+0

Je comprends ce que vous dites, pas de problèmes là-bas. Cependant, mon vrai problème est probablement la configuration de SSL dans IIS. Est-ce que la 'configuration de SSL' implique que les requêtes 'normales' 'http' (oui pas' https') continueront de fonctionner pour le site web? (sauf pour le contrôleur attribué bien sûr ..) – Ropstah

0

Vous pouvez annoter les contrôleurs nécessitant SSL avec l'attribut RequireHttps ou les faire dériver d'un contrôleur de base marqué avec cet attribut.