Как лучше всего использовать ResolveUrl () в общей / статической функции в Asp.Net? Мое текущее решение для VB.Net:
Dim x As New System.Web.UI.Control
x.ResolveUrl("~/someUrl")
Или C#:
System.Web.UI.Control x = new System.Web.UI.Control();
x.ResolveUrl("~/someUrl");
Но я понимаю, что это не лучший способ называть это.





Я использую System.Web.VirtualPathUtility.ToAbsolute.
Я обычно использую HttpContext.Current для получения страницы, а затем запускаю любые методы управления страницей / веб-сайтом.
Стоит отметить, что хотя 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