2011-05-24 5 views
0

Je viens d'intégrer un fournisseur de connexion unique dans mon application, qui envoie maintenant un paramètre de chaîne de requête lorsqu'il revient à la page demandée, ce qui provoque le chargement de la page. La façon dont il est mis en place est la suivante:Utilisation de chaînes de requête

  • J'ai un contrôleur à localhost/AppName/contrôleur, dont la méthode Index exige [Authorize]
  • authentification Forms redirige vers le SSO
  • SSO redirige vers localhost/AppName/Controller /? Ticket = stringvalue
  • La page ne se charge pas (le navigateur affiche un message "Impossible d'afficher la page Web"); supprimer le? billet d'affaires fait le chargement de la page.

méthode Mon index ressemble à ceci:

public ActionResult Index(string ticket) 

que je croyais accepter le paramètre de chaîne de requête. J'utilise la configuration de routage par défaut, à savoir:

routes.MapRoute(
    // Route name 
    "Default", 
    // URL with parameters 
    "{controller}/{action}/{id}", 
    // Parameter defaults 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 
+0

cela fonctionne-t-il si l'URL complète est utilisée - c'est-à-dire/Home/Index? Ticket = 'ticket'? –

+0

Lorsque vous supprimez l'activité '? Ticket', l'action' Index' est-elle toujours exécutée? –

Répondre

1

Il y a clairement quelque chose d'effrayant à ce sujet - car il n'y a pas de bonne raison pour que cela ne fonctionne pas. Je parie que si vous supprimez l'attribut [Autoriser], vous verrez que cela fonctionne avec le bit ?ticket=[value] dans l'URL.

Si oui, alors je pense Forms auth est coincé dans une boucle de redirection (et le navigateur, après un certain temps simplement refuser de continuer) - Je pense qu'il est de ne pas traiter la User actuelle comme IsAuthenticated=true et ainsi réoriente à votre SSO . L'authentification unique indique que l'utilisateur est connecté et redirige avec le paramètre ticket - ad nauseam.

Vous pouvez déboguer cela simplement avec le débogueur VS et mettre en pause votre méthode d'action. Il est souvent plus facile de déboguer au niveau Http: téléchargez Fiddler puis tapez sur votre site en utilisant le nom spécial http://ipv4.fiddler au lieu de http://localhost une fois qu'il est opérationnel.

Votre code doit contenir plus de code que celui que vous n'avez pas inclus. Vous avez probablement du code qui intercepte le code ticket et définit l'utilisateur à authentifier avant l'activation de la méthode d'action MVC. Si c'est le cas, je pense que cela échoue.

+0

Puisque je ne peux pas soumettre ma propre réponse, je vais juste jeter ceci ici: j'étais stupide. Le nom du serveur était "localhost" au lieu de "http: // localhost". – raoul1034

+0

Ah - maintenant je voudrais * dire * que je n'ai jamais fait ça avant ... mais je ne peux pas;) –

Questions connexes