没有ASP.NET页面的ResolveUrl

我正在寻找一种方法来解决您的页面或控件实例( MSDN文档 )的方式相对的url,如:

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

…但是当我只有一个HttpContext可用于我,如当我在一个HttpHandler。

我是否需要使用自定义函数,比如这里看到的函数?

或者是有一种方法来获得页面使用的基础function。

尝试从处理程序中获取页面并使用ResolveUrl ,或者创build一个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:在共享/静态函数中使用System.Web.UI.Control.ResolveUrl())上的这个问题看起来很有帮助…基本上,您可以使用System.Web下的VirtualPathUtility类命名空间。 这个问题还有一个额外的答案,说小心QueryString参数,但也提供了一个解决scheme。

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

使用这样的东西 – Controls是你的应用程序中的文件夹名称,myController是控制器名称。 创build和实例化并加载控制器,你可以通过以下方式来完成:

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

希望这可以帮助。