1

Lorsque vous essayez d'accéder à mon site:Authentification par formulaires et IIS7 (& MVC): Pourquoi ReturnUrl =/est ajouté?

www.X.com

Le navigateur change de l'URL pour:

www.X.com/

Le problème est que l'URL de résultat est:

www.X.com/HomePage.aspx?ReturnUrl=/

(HomePage.aspx est la page par défaut)

Sur IE: www.X.com/HomePage.aspx?ReturnUrl=%2f

Pour une raison quelconque l'authentification des formulaires traite/comme une page que l'utilisateur tente d'accéder et obtient ensuite une redirection vers: HomePage .aspx? ReturnUrl =/

Comment puis-je définir l'authentification par formulaire (ou le routage MVC) pour ne pas traiter/comme une page, donc lors de l'accès à www.X.com cela ne changera pas l'URL?

Le site fonctionne sur Windows Server 2008 IIS7, .NET 4.

(Lors de l'exécution sur IIS6 il n'a pas eu ce problème)

Web.config:

<authentication mode="Forms"> 
      <forms name=".AUTHCOOKIE" loginUrl="HomePage.aspx" defaultUrl="Loading.aspx" timeout="9480" /> 
    </authentication> 

MVC routage (pas sûr qu'il est lié):

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); 
     routes.IgnoreRoute("{resource}.ascx/{*pathInfo}"); 
     routes.IgnoreRoute("{resource}.ashx/{*pathInfo}"); 
     routes.IgnoreRoute("{resource}.gif/{*pathInfo}"); 

     routes.MapRoute("Actions", "A/{controller}/{action}", new { controller = "Tasks", action = "InitPage" }); 

    } 

Merci

Rafael

Répondre

0

En fait, lorsque vous accédez à http://www.x.com, vous demandez http://www.x.com/. Lorsque vous êtes redirigé vers le formulaire de validation dans IIS/.Net, RedirectTo = est toujours ajouté à la fin de l'URL, afin que le serveur sache où vous voulez aller avant que votre demande ait été interceptée.

Ou pour le dire autrement: tout fonctionne comme prévu. Qu'est-ce que tu veux faire exactement?

Si elle aide, je vois deux choses « bizarre » avec le code inclus:

  • La page de connexion est appelé HomePage.aspx. C'est ... inhabituel (avec ce nom, HomePage.aspx devrait être la page que vous allez après la connexion, pas la page de connexion). De plus, vous mentionnez MVC, mais ce n'est pas une route MVC.
  • Votre seule route dans Global.asax commence par "A /", de sorte que http://www.x.com/ ne sera pas capturé par elle. Si votre page de démarrage doit être http://www.x.com/A/Tasks/InitPage, faites soit A un paramètre route {quelquechose}, et assignez-lui une valeur par défaut, soit créez un autre MapRoute qui capture la requête "/" et redirige vers le bon chemin. Probablement ajouter un Default.aspx au projet fonctionnerait, mais ce serait très non-MVC.
+0

Voici ce que je veux: Lors de l'accès www.X.com accéder Homepage.aspx, mais sans aucune modification de l'URL (Même pas www.X.com/HomePage.aspx - il a travaillé sur IIS 6). Au lieu de cela sur IIS7, il redirige vers www.X.com/HomePage.aspx?ReturnUrl=/. C'est quelque chose à voir avec l'authentification par formulaire et IIS7. Je ne suis pas sûr de ce que je dois changer. – SirMoreno

+0

Aaah! Alors c'est facile (je pense). C'est juste que Homepage.aspx n'est pas configuré pour être la page par défaut renvoyée par http://www.X.com (dans IIS, vous n'avez que default.aspx, index.html, et quelques variantes). À cause de cela, "http://www.X.com/"! = "Http://www.X.com/HomePage.aspx", et vous obtenez le paramètre RedirectTo ajouté. – salgiza

+0

Homepage.aspx est la page par défaut (c'est pourquoi cela a fonctionné sur IIS6) – SirMoreno

3

Première étape: Vous pouvez définir des fichiers de configuration Web comme suit:

<authentication mode="Forms"> 
    <forms name=".AUTHCOOKIE" loginUrl="/" defaultUrl="Loading.aspx" timeout="9480" /> 
</authentication> 

Étape 2: Est-ce que votre serveur web (IIS) Les paramètres de document par défaut pour "Chargement ASPX"

+0

Ceci l'a fixé pour moi sur IIS 7.5, les autres suggestions sur cette page n'ont fait rien pour corriger le problème. –

2

Ajouter à l'asax global. J'ai eu un problème similaire et cela a semblé le réparer.

Private Sub Global_asax_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.BeginRequest 
    If (Request.AppRelativeCurrentExecutionFilePath.ToLower = "~/".ToLower) Then 
     HttpContext.Current.RewritePath("/Index.aspx") 
    End If 
End Sub 

Assurez-vous également sûr chemin = "/" est pas présent dans votre code d'authentification bloc

<authentication mode="Forms"> 
     <forms name=".ASPXAUTH" loginUrl="Index.aspx" defaultUrl="default.aspx" timeout="60"/> 
    </authentication> 

* Note. Vous pouvez convertir vb.net C# ici http://www.developerfusion.com/tools/convert/vb-to-csharp/

2

Ajouter une autorisation d'accès à votre page de connexion, par exemple:

<location path="Login.aspx"> 
<system.web> 
    <authorization> 
    <allow users="*" /> 
    </authorization> 
</system.web> 

et la balise form est:

<forms name="SecurityAuthentication" path="/" loginUrl="~/Login.aspx" defaultUrl="~/Default.aspx" timeout="60" /> 
0

Quelque part dans login.aspx.cs vente l'énoncé suivant:

if (Request.QueryString["ReturnUrl"] != null && Request.QueryString["ReturnUrl"] != "/") 
    { 
     Response.Redirect(Request.QueryString["ReturnUrl"]); 
    } 

T il partie la plus importante est cette condition:

Request.QueryString["ReturnUrl"] != "/" 
+0

Il serait utile d'expliquer pourquoi cela fonctionne. –

+0

Si nous déboguons dans le code, 'ReturnUrl =% 2f' signifie en fait' ReturnUrl =/'. Il a eu du mal à rediriger vers "/"; donc nous ignorons juste. Ça marche.Pour tout autre 'ReturnUrl', nous redirigeons vers cette URL en faisant' Response.Redirect'. – Hiraeth

0

Dans mon cas, je devais changer mon AppPool « Managed Pipeline mode » retour de « intégré » à « Classic ».

Questions connexes