如何处理Localhost中的相对路径和绝对路径

时间:2012-10-02 23:59:24

标签: c# .net url relative-path absolute-path

好的,我们大多数人在将它们发布到生产服务器之前,在我们的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.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变量并附加我的路径。

但我想了解你们是如何解决这个问题的?

谢谢,

3 个答案:

答案 0 :(得分:6)

我不太确定您要实现的目标,但您可以使用代字号(~)来引用Web应用程序的根目录,这可以解决您的问题。

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

如果~应该是localhostlocalhost:34534someserver.net/Deep/Path或其他任何内容,ASP.NET应用程序将自行确定。

答案 1 :(得分:1)

无论是通过配置参数还是应用程序都能找到适合的主机和任何路径,这都是表现良好的应用程序的工作。找出程序/脚本本身和主机名之间的路径(位之间)应该不难。在任何情况下,大多数情况下脚本/程序只能使用相对路径,Web服务器会自动为您添加其他位...所以不需要编写它。

答案 2 :(得分:0)

也许另一种方法是创建一个链接或我称之为目标文件夹的“伪路径”。例如,您创建一个指向文件夹“MyApp”(或相反)的链接“TheirApp”:

TheirApp --> MyApp

MyApp --> TheirApp

或者您可以在适当的子文件夹中执行此操作:

My/Path/MyApp --> Their/Path/TheirApp

Their/Path/TheirApp --> My/Path/MyApp
相关问题