2010-03-08 4 views
1

J'utilise un attribut <Authorize> dans ASP.NET MVC pour sécuriser un contrôleur. Ma page charge des portions de son contenu via AJAX. Voici un problème que j'ai avec IE8, mais pas Firefox 3.6:La redirection échoue dans IE mais fonctionne bien avec Firefox

  1. Connectez-vous en tant qu'utilisateur JohnDoe et accédez à http://www.example.com/AjaxPage. Tout fonctionne bien. AjaxPage est protégé par l'attribut <Authorize>.
  2. Déconnectez-vous, qui me redirige vers http://www.example.com. Cette page n'utilise pas <Authorize>. Naviguez vers http://www.example.com/AjaxPage sans vous connecter à nouveau. Je devrais être redirigé vers la page de connexion puisque ce contrôleur a l'attribut <Authorize>.

L'étape 3 fonctionne avec Firefox, mais IE8 affiche la partie non-Ajax de http://www.example.com/AjaxPage, puis ne charge jamais le contenu Ajax. Je suis surpris que tout le contenu soit affiché car je devrais être redirigé vers la page de connexion.

Mon code redirige vers la page de connexion avec:

Return Redirect("https://login.live.com/wlogin.srf?appid=MY-APP-ID&alg=wsignin1.0") 

Pourquoi Firefox gérer cette redirection, mais IE ne fonctionne pas? Comme cela fonctionne la première fois (étape 1 ci-dessus), y a-t-il un problème de cache?

EDIT: J'ai utilisé Fiddler pour voir si AjaxPage était en cache, mais il semble ne pas l'être. Je suppose que si elle était mise en cache, je récupérerais un code d'état HTTP 200. Je peux simplement mal comprendre cela.

+0

si vous définissez '[OutputCache (NoStore = true, Durée = 0, VaryByParam = "*")] 'attribut dans votre contrôleur? Il désactive le cache. – LukLed

+0

LukLed: Oui, ça a marché! Merci beaucoup. Vous devriez poster ceci comme réponse afin que je puisse vous donner les points. Aussi, voir mon Edit sur Fiddler ci-dessus. – royco

+0

Qu'est-ce que vous obtenez dans le violoneux? – LukLed

Répondre

3
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 

Cet attribut, placé dans la classe de contrôleur, désactive la mise en cache. Puisque je ne ai pas besoin de mise en cache dans mon application, je l'ai placé dans ma classe BaseController:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 
public abstract class BaseController : Controller 
{ 

Voici belle description OutputCacheAttribute: Improving Performance with Output Caching

Questions connexes