C# 为什么Request.Url.Authority返回的是内部路径而不是我的域
我正在研究本周上线的应用程序集的最终版本。我需要帮助来修改我的代码,或者向我们的宿主解释他们需要在IIS/DNS配置中修复什么,以使代码按预期工作 代码如下: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
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/
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
。