我正在寻找一种方法来解析相对 url,就像使用页面或控件实例 ( MSDN Docs ) 一样,例如:
Page.ResolveUrl("~/common/Error.aspx");
...但是当我只有一个可用的 HttpContext 时,例如当我在 HttpHandler 中时。
我是否需要使用自定义功能,例如此处看到的功能?
或者有没有办法获得页面使用的底层功能。
尝试从处理程序获取页面并使用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
这个关于 SO(ASP.Net: Using System.Web.UI.Control.ResolveUrl() in a shared/static function)的问题看起来很有帮助......基本上,您可以使用System.Web 下的VirtualPathUtility类命名空间。该问题还有一个额外的答案,它说要小心 QueryString 参数,但也提供了解决方案。
同时,Rick Strahl 的代码非常简洁!
使用类似这样的东西 - Controls 是应用程序中的文件夹名称,而 myController 是控制器名称。要创建和实例化并加载控制器,您可以通过以下方式完成:
Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));
希望这可以帮助。