Pergunta

Eu tenho um método que, onde eu quero redirecionar o usuário de volta para uma página de login localizado na raiz do meu aplicativo web.

Eu estou usando o seguinte código:

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

Isso não funciona embora.Minha suposição foi a de que ASP.NET gostaria de resolver automaticamente o URL para o caminho correto.Normalmente, eu só iria usar

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

mas este código em uma página mestra, e pode ser executado a partir de qualquer nível de pasta.Como posso contornar este problema?

Foi útil?

Solução

Eu acho que você precisa soltar o "~/" e substitua-a apenas com "/", eu acredito que / é a raiz

PARE AÍ! :-) a menos que você queira embutir seu aplicativo da web de forma que ele só pode ser instalado na raiz de um web site.

"~/" é a coisa correta a se usar, mas a razão que o código original não funcionou como o esperado é que ResolveUrl (que é usado internamente pelo Redirect) tenta primeiro se o caminho que você está passando é uma URL absoluta (por exemplo,"**http://server/**foo/bar.htm" em oposição a "foo/bar.htm"), mas, infelizmente, ele faz isso simplesmente procurando um caractere de dois-pontos ':' na URL que você dê a ele.Mas, neste caso, encontra dois pontos na URL que você dá no ReturnPath valor de cadeia de consulta, que leva - lo-portanto o '~/' não resolvido.

A correção é que você deve ser codificação URL a ReturnPath valor que escapa à problemática ':', juntamente com outros caracteres especiais.

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

Além disso, eu recomendo que você (ou qualquer pessoa) nunca uso Uri.ToString - porque ele dá uma legíveis por humanos, mais "amigável", versão da URL - não necessariamente correto (unescapes coisas).Em vez disso, usar Uri.AbsoluteUri - assim:

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

Outras dicas

você pode resolver o URL primeiro Resposta.Redirecionar("~/Login.aspx);e adicionar os parâmetros depois ele ficou resolvido.

Que tal usar

Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top