没有ASP.NET页面的ResolveUrl

cwe*_*ton 63 .net c# asp.net resolveurl

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

Page.ResolveUrl("~/common/Error.aspx");
Run Code Online (Sandbox Code Playgroud)

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

我是否需要使用自定义功能,例如此处显示的功能

或者有没有办法获得Page使用的底层函数.

Bru*_*oLM 106

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

(HttpContext.Current.Handler as Page).ResolveUrl("~/virtualpath");
Run Code Online (Sandbox Code Playgroud)

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

例如:

System.Web.VirtualPathUtility.ToAbsolute("~/Styles/Contoso.xslt");
Run Code Online (Sandbox Code Playgroud)

回报

/WebSite/Styles/Contoso.xslt
Run Code Online (Sandbox Code Playgroud)


dav*_*eps 17

关于SO的这个问题(ASP.Net:在共享/静态函数中使用System.Web.UI.Control.ResolveUrl())看起来很有帮助......基本上,你可以使用System.Web下的VirtualPathUtility类.命名空间.这个问题有一个额外的答案,它说要小心QueryString参数,但也提供了解决方案.

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