ASP.Net:Использование System.Web.UI.Control.ResolveUrl() в общей / статической функции
-
09-06-2019 - |
Вопрос
Каков наилучший способ использовать ResolveUrl() в общей / статической функции в Asp.Net?Мое текущее решение для VB.Net - это:
Dim x As New System.Web.UI.Control
x.ResolveUrl("~/someUrl")
Или С#:
System.Web.UI.Control x = new System.Web.UI.Control();
x.ResolveUrl("~/someUrl");
Но я понимаю, что это не самый лучший способ назвать это.
Решение
Я использую System.Web.Virtualpathulity.Абсолютный.
Другие советы
Стоит отметить, что, хотя 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);
}
...но если строка запроса передается из неизвестного источника, то вам нужно будет как-то ее разобрать.(Прежде чем вы углубитесь в это, обратите внимание на эту систему.Uri может сделать это за вас).
Я обычно использую HttpContext.Current для получения страницы, а затем запускаю любые методы управления страницей / веб-сайтом.