ASP.Net:在共享/静态函数中使用 System.Web.UI.Control.ResolveUrl()
Posted
技术标签:
【中文标题】ASP.Net:在共享/静态函数中使用 System.Web.UI.Control.ResolveUrl()【英文标题】:ASP.Net: Using System.Web.UI.Control.ResolveUrl() in a shared/static function 【发布时间】:2010-09-06 19:24:27 【问题描述】:在 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");
但我意识到这不是最好的称呼方式。
【问题讨论】:
【参考方案1】:我使用System.Web.VirtualPathUtility.ToAbsolute。
【讨论】:
【参考方案2】:值得注意的是,虽然 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 可能会为您完成)。
【讨论】:
这可能不再是真的了。在 .NET 4 中,当我评估VirtualPathUtility.ToAbsolute("~/bar/baz?qux=123&quux=456", "/foo")
时,我得到 /foo/bar/baz?qux=123&quux=456
【参考方案3】:
我倾向于使用 HttpContext.Current 来获取页面,然后运行任何页面/Web 控制方法。
【讨论】:
以上是关于ASP.Net:在共享/静态函数中使用 System.Web.UI.Control.ResolveUrl()的主要内容,如果未能解决你的问题,请参考以下文章