Question

J'ai une méthode par laquelle je souhaite rediriger l'utilisateur vers une page de connexion située à la racine de mon application Web.

J'utilise le code suivant :

Response.Redirect("~/Login.aspx?ReturnPath=" + Request.Url.ToString());

Cela ne fonctionne pas cependant.Mon hypothèse était qu'ASP.NET résoudrait automatiquement l'URL dans le chemin correct.Normalement, j'utiliserais simplement

Response.Redirect("../Login.aspx?ReturnPath=" + Request.Url.ToString());

mais ce code se trouve sur une page maître et peut être exécuté à partir de n'importe quel niveau de dossier.Comment contourner ce problème ?

Était-ce utile?

La solution

Je pense que vous devez supprimer le "~/" et le remplacer par juste "/", je crois que / est la racine

ARRÊTE TOI LÀ! :-) sauf si vous souhaitez coder en dur votre application Web afin qu'elle ne puisse être installée qu'à la racine d'un site Web.

"~/" est la bonne chose à utiliser, mais la raison pour laquelle votre code d'origine n'a pas fonctionné comme prévu est que ResolveUrl (qui est utilisé en interne par Redirect) essaie d'abord de déterminer si le chemin que vous lui transmettez est une URL absolue (par ex."**http://serveur/**foo/bar.htm" par opposition à "foo/bar.htm") - mais malheureusement, il le fait en recherchant simplement le caractère deux-points ':' dans l'URL que vous lui donnez.Mais dans ce cas, il trouve deux points dans l'URL que vous indiquez dans le champ ReturnPath valeur de chaîne de requête, ce qui la trompe - donc votre '~/' n'est pas résolu.

Le correctif est que vous devez encoder l'URL du ReturnPath valeur qui échappe au problématique ':' ainsi qu'à tout autre caractère spécial.

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.ToString()));

De plus, je vous recommande (ou à quiconque) de ne jamais utiliser Uri.ToString - parce qu'il donne une version lisible et plus "conviviale" de l'URL - pas nécessairement correcte (cela évite les choses).Utilisez plutôt Uri.AbsoluteUri - comme ceci :

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.AbsoluteUri));

Autres conseils

Vous pouvez résoudre l'URL First Response.Redirect ("~ / Login.aspx);et ajoutez les paramètres une fois le problème résolu.

Qu'en est-il de l'utilisation

Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top