C# 为什么Request.Url.Authority返回的是内部路径而不是我的域

C# 为什么Request.Url.Authority返回的是内部路径而不是我的域,c#,asp.net-mvc-3,iis-6,C#,Asp.net Mvc 3,Iis 6,我正在研究本周上线的应用程序集的最终版本。我需要帮助来修改我的代码,或者向我们的宿主解释他们需要在IIS/DNS配置中修复什么,以使代码按预期工作 代码如下: public string BaseSiteUrl { get { var c = this.ControllerContext.RequestContext.HttpContext; string baseUrl = c.Request.Url.Scheme + "://" + c.Req

我正在研究本周上线的应用程序集的最终版本。我需要帮助来修改我的代码,或者向我们的宿主解释他们需要在IIS/DNS配置中修复什么,以使代码按预期工作

代码如下:

public string BaseSiteUrl
{
    get
    {
        var c = this.ControllerContext.RequestContext.HttpContext;
        string baseUrl = c.Request.Url.Scheme + "://" + c.Request.Url.Authority
                       + c.Request.ApplicationPath.TrimEnd('/') + '/';
        return baseUrl;
    }
}
我在我的控制器中对此进行调用,以生成一个持久化到数据库的url

当我在本地机器上运行时,它工作正常。但是,在beta服务器上运行时,它不起作用

测试版的预期结果。在beta服务器上,这是一个名为
dr405

  • https://beta.sc-pa.com/dr405/
测试版的实际结果。(为了安全起见,我将服务器/域名更改为CAPS中的名称)

  • http://SERVERNAME1.GROUP1.SUBGROUP.local/dr405/

    • 我认为你不需要你写的方法。有一个类添加扩展方法。要获取站点的基本URL,应使用以下方法:

      var baseUrl = Url.Content("~/");
      
      string hostName = Request.Headers["x-forwarded-host"];
      hostName = string.IsNullOrEmpty(hostName) ? Request.Url.Host : hostName;
      

      在您的示例中,它看起来像
      http://SERVERNAME1.GROUP1.SUBGROUP.local/dr405/
      结果是一个内部主机名。在开发计算机上,内部主机与面向公众的主机相匹配。您的主机服务提供商不太可能为您修改此选项,尤其是如果它是共享主机服务解决方案。

      如果您使用负载平衡器或类似设备,则可能需要检查服务器变量。在我们的案例中,我们会这样做:

      var baseUrl = Url.Content("~/");
      
      string hostName = Request.Headers["x-forwarded-host"];
      hostName = string.IsNullOrEmpty(hostName) ? Request.Url.Host : hostName;
      
      我刚才问的这个问题可能很有趣:


      由于时间限制,以及需要将此项目推出,我不得不求助于将url的主要部分硬编码到应用程序中。在我做出改变之后,我觉得自己很愚蠢,因为我一开始就试图让它充满活力。我的意思是我们的域名应该多久更改一次?

      谢谢,但这根本没有帮助。我需要完全限定的Url。这会生成一个相对的Url,因此在我的第二个应用程序中,指向beta.sc-pa.com的href标记如下所示
      href=“/dr405//dr405/Wizard/Review/B00593.2660”
      您将遇到的问题是,您需要查询运行主机名代码的服务器。但是它(正确地)认为它的主机名是
      SERVERNAME1.GROUP1.SUBGROUP.local
      。仅仅因为有一个面向公众的DNS条目将流量路由到它,并不意味着它知道这一点。正如我所说,可能有许多面向公众的DNS条目指向
      SERVERNAME1.GROUP1.SUBGROUP.local