Vale la pena señalar que aunque System.Web.VirtualPathUtility.ToAbsolute es muy útil aquí, es no un reemplazo perfecto para Control.ResolveUrl.
Hay al menos una diferencia significativa: Control.ResolveUrl maneja cadenas de consulta muy bien, pero hacen que VirtualPathUtility arroje una HttpException. Esto puede ser absolutamente desconcertante la primera vez que sucede, especialmente si estás acostumbrado a la forma en que funciona Control.ResolveUrl.
Si conoce la estructura exacta de la cadena de consulta que desea utilizar, esto es bastante fácil de evitar, a saber:
public static string GetUrl(int id)
{
string path = VirtualPathUtility.ToAbsolute("~/SomePage.aspx");
return string.Format("{0}?id={1}", path, id);
}
... pero si la cadena de consulta se está aprobada en de una fuente desconocida entonces vas a necesitar analizarlo de alguna manera. (Antes de profundizar en eso, tenga en cuenta que System.Uri podría hacerlo por usted).
Esto puede no ser cierto más. En .NET 4 cuando evalúo 'VirtualPathUtility.ToAbsolute (" ~/bar/baz? Qux = 123 & quux = 456 ","/foo ")' obtengo '/ foo/bar/baz? Qux = 123 & quux = 456' –