2012-01-03 160 views
2

我正在处理本周设置的应用程序的最终问题。我需要帮助来修改我的代码或向我们的主机解释他们需要在IIS/DNS配置中修复哪些代码,以使代码正常工作。为什么Request.Url.Authority正在返回内部路径而不是我的域

下面是代码:

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服务器上运行时不起作用。

预期测试结果。在公测服务器,这是一个名为dr405

  • https://beta.sc-pa.com/dr405/

上测试的实际结果的应用程序。 (我改变了服务器/域名你在CAPS看到为了安全起见)

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

回答

0

由于时间的限制,并且需要获得这个项目了门,我不得不诉诸硬编码的网址的主要部分进入应用程序。在我做出改变之后,我首先想让它变得动态,我觉得很愚蠢。我的意思是我们的域名应该多久改变一次?

1

我不认为你需要你写的方法。有一个UrlHelper类添加扩展方法。要为您的网站的基本URL,你应该使用Content()方法是这样的:

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

在您的例子,它看起来像http://SERVERNAME1.GROUP1.SUBGROUP.local/dr405/结果是内部主机名。在您的开发机器上内部主机匹配您的公众面临之一。您的托管服务提供商不太可能为您进行修改,特别是如果它是共享托管解决方案。

+0

谢谢,但这根本没有帮助。我需要完全合格的Url。这会生成一个相对的Url,所以在我的第二个应用程序中,应该指向beta.sc-pa.com的href标记看起来像这样:'href =“/ dr405 // dr405/Wizard/Review/B00593.2660”' – 2012-01-03 14:05:36

+0

您将遇到的麻烦是您需要询问运行主机名代码的服务器。但它(正确)认为它的主机名是'SERVERNAME1.GROUP1.SUBGROUP.local'。仅仅因为有一个面向公众的DNS条目将流量路由到它,并不意味着它意识到这一点。正如我所说的,可能有**许多面向公众的DNS条目指向“SERVERNAME1.GROUP1.SUBGROUP.local”。 – Yuck 2012-01-03 14:08:43

+2

谢谢@Yuck。这听起来像一份...... ** CAPTAIN HARDCODE ** – 2012-01-03 14:12:03

0

如果您位于负载平衡器或类似环境后面,则可能需要检查服务器变量。在我们的例子中,我们做这样的事情:

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

这个问题,我问前一阵子可能会感兴趣:

Asp.net mvc 301 redirect from www.domain.com to domain.com

相关问题