2012-10-02 217 views
1

好的我们大多数人在将它们发布到生产服务器之前,先在我们的本地主机上开发和测试Asp.NET Web应用程序。但对我来说,本地主机有时候是一种痛苦,因为我无法正确地获得绝对路径。因为让我们说我的应用程序位于http://localhost/MyApp/我无法正确获取主机。我可以通过几个代码来获得它,但是我希望使它更通用,所以无论何时其他开发人员将相同的应用程序放在另一个位置,例如http://localhost/TheirApp,那么它应该可以正常工作。如何处理Localhost中的相对路径和绝对路径

样本问题:

每当我使用绝对路径,这样/aboutus.aspx,它会导致这个http://localhost/aboutus.aspx和省略MyApp。如果我使用相对路径,那么它变成http://localhost/MyApp/IamHere.aspx/aboutus.aspx,这是相当令人不安的。

因此,如果Request.Url.AuthorityRequest.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变量和我的道路追加到它。

但我喜欢了解你们是如何处理这样的问题的?

感谢,

回答

5

我不太清楚你想达到什么样的,但你可以使用波浪号(~)指Web应用程序的根目录,并应解决您的问题。

string url = ResolveUrl("~/aboutus.apsx"); 

的ASP.NET应用程序将找出本身,如果~localhostlocalhost:34534someserver.net/Deep/Path或其他任何东西。

+0

你甚至不需要代字符。使用裸文件名将是当前主机和端口的当前Web应用程序的当前目录。或者你可以更明确地说同样的事情./whatever.aspx – chris

+0

如果我哭了?我怎么总是忘记'〜/':/ – Tarik

0

无论是通过配置参数还是应用程序计算出来,这都是运行良好的应用程序可以在任何主机和任何路径上工作的工作。找出程序/脚本本身和主机名之间的路径(位之间)应该不会太困难。在任何情况下,脚本/程序大部分都只能使用相对路径,网络服务器会自动为您添加其他位...因此无需编写它。