Domanda

Ho un metodo in cui desidero reindirizzare l'utente a una pagina di accesso situata nella radice della mia applicazione web.

Sto usando il seguente codice:

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

Questo però non funziona.La mia ipotesi era che ASP.NET avrebbe risolto automaticamente l'URL nel percorso corretto.Normalmente, userei semplicemente

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

ma questo codice si trova su una pagina master e può essere eseguito da qualsiasi livello di cartella.Come posso aggirare questo problema?

È stato utile?

Soluzione

Penso che tu debba eliminare "~/" e sostituirlo solo con "/", credo che / sia la radice

FERMATI LÀ! :-) a meno che tu non voglia codificare la tua app web in modo che possa essere installata solo nella root di un sito web.

"~/" È la cosa corretta da usare, ma il motivo per cui il codice originale non ha funzionato come previsto è quello ResolveUrl (che viene utilizzato internamente da Redirect) cerca innanzitutto di capire se il percorso che stai passando è un URL assoluto (ad es."**http://server/**foo/bar.htm" invece di "foo/bar.htm") - ma sfortunatamente lo fa semplicemente cercando i due punti ":" nell'URL che gli fornisci.Ma in questo caso trova i due punti nell'URL fornito nel file ReturnPath query string value, il che lo inganna, quindi il tuo '~/' non viene risolto.

La soluzione è che dovresti codificare l'URL del file ReturnPath valore che sfugge al problematico ":" insieme a qualsiasi altro carattere speciale.

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

Inoltre, consiglio a te (o a chiunque) di non usarlo mai Uri.ToString - perché fornisce una versione dell'URL leggibile dall'uomo e più "amichevole" - non necessariamente corretta (non sfugge alle cose).Utilizza invece Uri.AbsoluteUri, in questo modo:

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

Altri suggerimenti

È possibile risolvere l'URL prima risposta.redirect ("~/login.aspx);e aggiungi i parametri dopo che è stato risolto.

Che ne dici di usare

Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top