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

StackOverflow https://stackoverflow.com/questions/26796

Вопрос

Каков наилучший способ использовать 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.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 для получения страницы, а затем запускаю любые методы управления страницей / веб-сайтом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top