【问题标题】:Returning path that is different between local and live server本地和实时服务器之间的返回路径不同
【发布时间】:2012-07-30 16:45:05
【问题描述】:

我正在使用这样的方法来获取我的应用程序的 URL 路径:

string strPathAndQuery = HttpContext.Request.Url.PathAndQuery;
string strUrl = HttpContext.Request.Url.AbsoluteUri.Replace(strPathAndQuery, "/");

这应该是指向当前 URL 的路径。

问题是,我的实时服务器将应用程序作为 IIS 服务器内的应用程序(文件夹)运行。因此,在测试 a 时,我会得到如下 URL:

http://localhost/Survey/Create

我得到了生活:

http://testurl.com/Survey/Create

当我需要实时服务器时:

http://testurl.com/SurveyApp/Survey/Create

SurveyApp 是在 IIS 中存储应用程序的文件夹。有没有一种方法可以让我获得控制器所在位置的 URL,而不管物理位置如何?

【问题讨论】:

    标签: c# asp.net-mvc-3 iis-7 asp.net-mvc-routing


    【解决方案1】:

    为此,MVC 有一些方法,例如 Url.Content。当您使用“~/Survey/Query”之类的应用程序目录相对路径时,这些将解析当前 url。您还可以使用 Html.ActionLink 或 Url.Action 之类的方法来获取特定操作方法的 url。这些将根据您的正确路径进行调整。

    您能否更具体地说明您为什么要尝试获取路径?

    【讨论】:

    • 我正在使用邮件组件发送排队的电子邮件,并且需要包含指向特定控制器和操作的链接。由于它是邮件组件的正文消息,我认为我不能使用 Razor 语法。
    • @user547794 - 我提到的方法与 Razor 无关,只是您可以从 Razor 调用它们。但是,您将不得不稍微按摩它们以获取绝对路径(这些方法仅提供相对 URL)
    【解决方案2】:

    您是否尝试在相关 URI 前添加 ~ 符号。例如,要链接/Survey/Query,请使用~/Survey/Query

    编辑:

    HttpContext.Current.Request.ApplicationPath 呢?

    【讨论】:

    • 这在 MVC 应用程序中不起作用,除非您使用虚拟路径感知的特定方法。
    【解决方案3】:

    Url.Content 就是你想要的。比如:

    string url = Url.Content("Query", "Survey");
    

    第一个参数是Action,第二个是Controller。 http://msdn.microsoft.com/en-us/library/dd492758

    还有很多你可以使用的重载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-31
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      相关资源
      最近更新 更多