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

本文关键字:我的 域名 路径 内部 Authority Url 返回 为什么 Request | 更新日期: 2023-09-27 18:19:14

我正在处理一个将于本周发布的应用程序的最后几个问题。我需要帮助来修改我的代码或向我们的主机解释他们需要在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;
    }
}

我在我的控制器中调用this,生成一个持久化到数据库的url。

当我在本地机器上运行时,它工作得很好。但是,当它在测试服务器上运行时,它不能工作。

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

的应用程序
  • https://beta.sc-pa.com/dr405/

beta的实际结果。(为了安全起见,我将服务器/域名更改为您在CAPS中看到的内容)

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

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

我认为你不需要你写的方法。有一个UrlHelper类添加了扩展方法。要获得您的网站的基本URL,您应该使用Content()方法,如下所示:

var baseUrl = Url.Content("~/");

在您的示例中,看起来http://SERVERNAME1.GROUP1.SUBGROUP.local/dr405/结果是一个内部主机名。在您的开发机器上,内部主机与您的面向公共的主机匹配。您的主机提供商不太可能为您修改这个,特别是如果它是一个共享主机解决方案。

如果您使用负载平衡器或类似的设备,那么检查服务器变量可能是值得的。在我们的例子中,我们这样做:

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

我刚才问的这个问题你可能会感兴趣:

Asp.net mvc 301重定向从www.domain.com到domain.com

由于时间限制,并且需要完成这个项目,我不得不将url的主要部分硬编码到应用程序中。在我做出改变后,我觉得一开始试图让它充满活力是愚蠢的。我是说我们的域名应该多久换一次?