提问人:travis 提问时间:8/26/2008 更新时间:2/28/2020 访问量:23863
ASP.Net:在共享/静态函数中使用 System.Web.UI.Control.ResolveUrl()
ASP.Net: Using System.Web.UI.Control.ResolveUrl() in a shared/static function
问:
在 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");
但我意识到这不是最好的称呼方式。
答:
48赞
Dave Ward
8/26/2008
#1
我使用 System.Web.VirtualPathUtility.ToAbsolute。
3赞
Keith
8/26/2008
#2
我倾向于使用 HttpContext.Current 来获取页面,然后运行任何页面/Web 控制方法。
23赞
jdw
2/9/2009
#3
值得注意的是,尽管 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 可能能够为您完成此操作)。
评论
0赞
Michael Kropat
9/16/2016
这可能不再是真的了。在 .NET 4 中,当我评估时,我得到VirtualPathUtility.ToAbsolute("~/bar/baz?qux=123&quux=456", "/foo")
/foo/bar/baz?qux=123&quux=456
下一个:过滤掉字符串中的锚标记
评论