好的,我们大多数人在将它们发布到生产服务器之前,在我们的localhost中开发和测试Asp.NET Web应用程序。但对我来说,localhost很痛苦,因为我无法正确地获得绝对路径。因为我可以说我的应用程序位于http://localhost/MyApp/
我无法正常获取主机。我可以使用几个代码来获取它但我喜欢使它更通用,所以每当其他开发人员将相同的应用程序放在另一个位置(例如http://localhost/TheirApp
)时,它应该可以正常工作。
示例问题:
每当我使用像/aboutus.aspx
这样的绝对路径时,它会导致http://localhost/aboutus.aspx
并忽略MyApp
。如果我使用相对路径,则它变为http://localhost/MyApp/IamHere.aspx/aboutus.aspx
,这是相当令人不安的。
因此,如果Request.Url.Authority
或Request.Url.Host
返回http://localhost/MyApp
,那么我们可以使用这些来附加我们的网址并找到一个不错的解决方案。
另类解决方案:
我可以这样做:
if(Request.Url.Host.StartsWith("localhost"))
{
string[] segments = Request.Url.AbsolutePath.Split("/");
var localHost = Request.Url.Authority + "/" + segments[0];
}
然后我可以使用localHost
变量并附加我的路径。
但我想了解你们是如何解决这个问题的?
谢谢,
答案 0 :(得分:6)
我不太确定您要实现的目标,但您可以使用代字号(~
)来引用Web应用程序的根目录,这可以解决您的问题。
string url = ResolveUrl("~/aboutus.apsx");
如果~
应该是localhost
,localhost:34534
,someserver.net/Deep/Path
或其他任何内容,ASP.NET应用程序将自行确定。
答案 1 :(得分:1)
答案 2 :(得分:0)
也许另一种方法是创建一个链接或我称之为目标文件夹的“伪路径”。例如,您创建一个指向文件夹“MyApp”(或相反)的链接“TheirApp”:
TheirApp --> MyApp
MyApp --> TheirApp
或者您可以在适当的子文件夹中执行此操作:
My/Path/MyApp --> Their/Path/TheirApp
Their/Path/TheirApp --> My/Path/MyApp