Стоит отметить, что хотя System.Web.VirtualPathUtility.ToAbsolute здесь очень полезен, это не прекрасная замена для Control.ResolveUrl.
Существует по крайней мере одно существенное различие: Control.ResolveUrl обрабатывает строки запроса очень красиво, но они заставляют VirtualPathUtility бросать исключение HttpException. Это может быть абсолютно мистифицировано в первый раз, когда это происходит, особенно если вы привыкли к тому, как работает Control.ResolveUrl.
Если вы знаете точную структуру строки запроса вы хотите использовать, это достаточно легко обойти, а именно:
public static string GetUrl(int id)
{
string path = VirtualPathUtility.ToAbsolute("~/SomePage.aspx");
return string.Format("{0}?id={1}", path, id);
}
... но если строка запроса является получение передается из неизвестный источник, тогда вам нужно каким-то образом разобрать его. (Прежде чем вы слишком глубоко вникаете в это, обратите внимание, что System.Uri может это сделать для вас).
Это может быть и неправдой. В .NET 4, когда я оцениваю `VirtualPathUtility.ToAbsolute (" ~/bar/baz? Qux = 123 & quux = 456 ","/foo ")` Я получаю `/ foo/bar/baz? Qux = 123 & quux = 456` – 2016-09-15 17:09:24