Pergunta

Qual é a melhor maneira de usar ResolveUrl() em uma função compartilhada/estática no Asp.Net?Minha solução atual para VB.Net é:

Dim x As New System.Web.UI.Control
x.ResolveUrl("~/someUrl")

Ou C#:

System.Web.UI.Control x = new System.Web.UI.Control();
x.ResolveUrl("~/someUrl");

Mas percebo que essa não é a melhor maneira de chamar isso.

Foi útil?

Outras dicas

Vale a pena notar que embora System.Web.VirtualPathUtility.ToAbsolute seja muito útil aqui, é não um substituto perfeito para Control.ResolveUrl.

Há pelo menos uma diferença significativa:Control.ResolveUrl lida muito bem com Query Strings, mas elas fazem com que VirtualPathUtility lance uma HttpException.Isso pode ser absolutamente confuso na primeira vez que acontece, especialmente se você estiver acostumado com a maneira como Control.ResolveUrl funciona.

Se você conhece a estrutura exata da string de consulta que deseja usar, isso é fácil de contornar, a saber:

public static string GetUrl(int id)
{
    string path = VirtualPathUtility.ToAbsolute("~/SomePage.aspx");
    return string.Format("{0}?id={1}", path, id);
}

... mas se a string de consulta estiver sendo transmitida de uma fonte desconhecida, você precisará analisá-la de alguma forma.(Antes de se aprofundar nisso, observe que System.Uri pode fazer isso por você).

Costumo usar HttpContext.Current para obter a página e, em seguida, executar qualquer método de controle de página/web a partir dela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top