por Cesar Cassiano Schimanco

Manter a URL após o postback em ASP.NET (Postback + Url Rewriting + Global.asax)

Um problema muito comum de quem usa o Global.asax para reescrever a URL (Url Rewriting), para deixa-la mais amigável é que depois do postback a URL volta a ficar como era antes de ser reescrita.

Antes do postback, usando Url Rewriting:
www.site.com.br/produtos/produto-de-teste.aspx

Depois do postback
www.site.com.br/produto?id=1

Muito comum também quando temos um formulário de contato e validamos os campos no postback, ao retornar da validação, retorna a URL real.
Então para resolver isso é relativamente simples, usando essa linha de código no botão enviar:

 

btnSend.PostBackUrl = Request.RawUrl;

Mas como na pratica a teoria é outra, tive que criar uma função para resolver meu problema, tendo em vista que minha URL era assim:
www.site.com.br/faq/pergunta-sobre-c%23.aspx
e com o Request.RawUrl ficava assim:
www.site.com.br/faq/pergunta-sobre-c#.aspx

Solução encontrada, foi essa abaixo, onde uso o UrlEncode para codificar o que fica entre a ultima "/" e o ".aspx".
Por que apenas a parte entre "/" e o ".aspx"?
Porque se fizer com toda a URL ele ira codificar inclusive "/" e ".".
 

btnSend.PostBackUrl = GetRawUrl();
...

public string GetRawUrl()
{
	string _return = string.Empty;
	string sRawUrl = HttpContext.Current.Request.RawUrl;
	if (sRawUrl.LastIndexOf("/") != -1)
	{
		if (sRawUrl.ToLower().LastIndexOf(".aspx") != -1)
			sRawUrl = sRawUrl.Replace(".aspx", "");
		_return = sRawUrl.Substring(0, sRawUrl.LastIndexOf("/") + 1) +
		HttpUtility.UrlEncode(sRawUrl.Substring(sRawUrl.LastIndexOf("/") + 
		1,sRawUrl.Length - (sRawUrl.LastIndexOf("/") + 1)))
		+ (HttpContext.Current.Request.RawUrl.ToLower()
			.LastIndexOf(".aspx") != -1 ? ".aspx" : "");
	}
	return _return;
}

 

Comentários

Carregando comentários

Postar um novo comentário



Processando...