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 がそれを実行できる可能性があることに注意してください)。