35

Asp.Netの共有/静的関数でResolveUrl()を使用する最良の方法は何ですか? 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");

しかし、それはそれを呼び出す最良の方法ではないことを認識しています。

4

3 に答える 3

48

System.Web.VirtualPathUtility.ToAbsoluteを使用します。

于 2008-08-25T20:35:46.037 に答える
23

System.Web.VirtualPathUtility.ToAbsolute はここで非常に便利ですが、Control.ResolveUrl の完全な代替ではないことに注意してください。

少なくとも 1 つの大きな違いがあります。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 がそれを実行できる可能性があることに注意してください)。

于 2009-02-09T13:48:50.613 に答える
3

私は HttpContext.Current を使用してページを取得し、それからページ/Web コントロール メソッドを実行する傾向があります。

于 2008-08-25T20:37:09.967 に答える