ASP.Net: использование System.Web.UI.Control.ResolveUrl () в общей / статической функции - PullRequest
34 голосов
/ 26 августа 2008

Каков наилучший способ использования 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");

Но я понимаю, что это не лучший способ назвать это.

Ответы [ 3 ]

48 голосов
/ 26 августа 2008
22 голосов
/ 09 февраля 2009

Стоит отметить, что хотя 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 может сделать это за вас).

3 голосов
/ 26 августа 2008

Я обычно использую HttpContext.Current, чтобы получить страницу, а затем запускаю любые методы управления страницей / веб-интерфейсом.

...