2008-08-25 10 views
32

Asp.Netの共有/静的関数でResolveUrl()を使用する最も良い方法は何ですか?ASP.Net:共有/静的関数でSystem.Web.UI.Control.ResolveUrl()を使用する

Dim x As New System.Web.UI.Control 
x.ResolveUrl("~/someUrl") 

またはC#:VB.Netのための私の現在のソリューションです

System.Web.UI.Control x = new System.Web.UI.Control(); 
x.ResolveUrl("~/someUrl"); 

しかし、私はそれはそれを呼び出すの最良の方法ではありません実現しています。

答えて

3

私は、ページを取得するためにHttpContext.Currentを使用し、そのページ/ Webコントロールメソッドをオフにする傾向があります。

21

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がそれを行うことができるかもしれないことに注意してください)。

+0

これはもう真実ではないかもしれません。 .NET 4では 'VirtualPathUtility.ToAbsolute("〜/ bar/baz?qux = 123&quux = 456 "、"/foo ")を評価すると/ foo/bar/baz?qux = 123&quux = 456' –

関連する問題