66

我正在寻找一种方法来解析相对 url,就像使用页面或控件实例 ( MSDN Docs ) 一样,例如:

Page.ResolveUrl("~/common/Error.aspx");

...但是当我只有一个可用的 HttpContext 时,例如当我在 HttpHandler 中时。

我是否需要使用自定义功能,例如此处看到的功能?

或者有没有办法获得页面使用的底层功能。

4

3 回答 3

116

尝试从处理程序获取页面并使用ResolveUrl,或创建一个 Control 对象...

(HttpContext.Current.Handler as Page).ResolveUrl("~/virtualpath");

或使用VirtualPathUtility.ToAppRelative(string)VirtualPathUtility.ToAbsolute(string)

例如:

System.Web.VirtualPathUtility.ToAbsolute("~/Styles/Contoso.xslt");

返回

/WebSite/Styles/Contoso.xslt
于 2011-02-04T02:07:35.453 回答
17

这个关于 SO(ASP.Net: Using System.Web.UI.Control.ResolveUrl() in a shared/static function)的问题看起来很有帮助......基本上,您可以使用System.Web 下的VirtualPathUtility类命名空间。该问题还有一个额外的答案,它说要小心 QueryString 参数,但也提供了解决方案。

同时,Rick Strahl 的代码非常简洁!

于 2011-02-04T00:49:22.510 回答
1

使用类似这样的东西 - Controls 是应用程序中的文件夹名称,而 myController 是控制器名称。要创建和实例化并加载控制器,您可以通过以下方式完成:

Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));

希望这可以帮助。

于 2013-08-27T19:38:24.680 回答