2009-12-01 5 views
1

J'ai [requireSsl] sur mon contrôleur de comptes.attribut requireSsl mvc: travailler avec returlUrl

Il semble fonctionner pour toutes les actions sauf l'action de connexion. Je crois que c'est parce que l'action de connexion est appelée comme suit:

new { controller = "Account", returnUrl = HttpContext.Current.Request.RawUrl } 


Account/Login?returnUrl... 
Account/Login%3freturnUrl... 

lors du passage à https la deuxième ligne entraîne une mauvaise demande.

EDIT: LE PROBLÈME EST QUE LE "?" LE PERSONNAGE EST TRANSFORME EN "% 3F". J'ai aussi essayé de le faire avec url rewirte dans iis7 et la même chose. Alors, quelle est la cause et comment réparer? MISE À JOUR: J'ai obtenu HTTPS à travailler en utilisant IIS Rewrite, mais pas MVC comme décrit ci-dessus. J'ai enlevé enable ssl et l'ai fait purement dans iis. Je voudrais toujours savoir pourquoi ça ne marche pas en mvc.

Répondre

2

Cela ne fonctionne pas à cause de ce que vous avez indiqué: le? le caractère est encodé quand il ne devrait pas. C'est un bug.

Le code RequireSslAttribute d'origine:

UriBuilder builder = new UriBuilder 
{ 
    Scheme = "https", 
    Host = filterContext.HttpContext.Request.Url.Host, 
    // gets encoded and shouldn't include the ? 
    Path = filterContext.HttpContext.Request.RawUrl 
}; 
filterContext.Result = new RedirectResult (builder.ToString()); 

devrait probablement être changé quelque chose comme

UriBuilder builder = new UriBuilder 
{ 
Scheme = "https", 
Host = filterContext.HttpContext.Request.Url.Host, 
Path = filterContext.HttpContext.Request.Path, 
Query = filterContext.HttpContext.Request.QueryString.ToString() 
}; 
filterContext.Result = new RedirectResult (builder.ToString()); 
+0

travaillé pour moi, merci. –