Asp.net IIS应用程序池缓存错误的url

Asp.net IIS应用程序池缓存错误的url,asp.net,iis-7,Asp.net,Iis 7,我有我的生产网站的应用程序池回收每2小时左右。我注意到,当第一次调用该站点时,应用程序池会缓存基本url(例如www.mysite.com)。这是有意义的,因为它用于解析ASP.NET中的相对路径,例如~/MyFolder/MyPage.aspx,解析为: http://www.mysite.com/MyFolder/MyPage.aspx 但是,由于可以通过我们的主机名访问该站点,例如 http://masdfg.my.provider.net IIS认为url是 http://masdf

我有我的生产网站的应用程序池回收每2小时左右。我注意到,当第一次调用该站点时,应用程序池会缓存基本url(例如www.mysite.com)。这是有意义的,因为它用于解析ASP.NET中的相对路径,例如~/MyFolder/MyPage.aspx,解析为:

http://www.mysite.com/MyFolder/MyPage.aspx
但是,由于可以通过我们的主机名访问该站点,例如

http://masdfg.my.provider.net
IIS认为url是

http://masdfg.my.provider.net/MyFolder/MyPage.aspx
正如您所想象的,这会导致SSL以及其他问题。我怎样才能防止这种情况发生


更新:解决方法是创建url重定向。如果有人知道如何防止这种情况发生,请告诉我。

我希望我正确理解了您的问题,但如果我没有正确理解,请务必告诉我

听起来您唯一的问题是,当您编写响应的链接时,它们有时会引用错误的根URL

我注意到您使用了~/。这将解析并将整个URL写入我认为的响应。最好仅在编写响应链接时使用/

因此,在您的示例中,您将编写/myfolder/mypage.aspx。然后,浏览器会将/解析为表示它来自站点的根地址,无论是哪个地址


正如我所说,我希望我已经正确理解了您的问题,如果我没有理解,我表示歉意。

我知道这是一个长期的问题,但我的IIS设置也有类似的问题。我通过“编辑绑定”转到前面提到的“绑定”窗口,解决了这个问题

然后我删除了所有不需要的绑定,然后添加了服务器应该响应的主机名www.mydomain.com

最后,我在上编辑了windows主机文件

%windir%\System32\drivers\etc\hosts
添加行

127.0.0.1 www.mydomain.com
这确保www.mydomain.com始终解析到本地计算机


以管理员身份执行iisreset.exe后,我的问题就解决了。

HttpContext.Current.Request.Url不是可缓存项。该值来自HTTP头的主机值。这意味着它是从请求传递到应用程序的

第二个URL需要的唯一时间是请求主机值是否为
masdfg.my.provider.net

这里有三种可能的修复方法。首先是设置绑定,并将对
masdfg.my.provider.net
的任何请求转发到
www.mysite.com

第二,因为您的主要问题似乎与SSL有关,所以您需要获得统一通信(UC)SSL证书并将其安装到服务器上。这将包括mysite.com和masdfg.my.provider.net域名


第三种方法是简单地创建一个单独的IIS站点,该站点指向与第一个站点完全相同的生产目录。每个站点只负责一个域名。

应用程序池被回收以清除未使用的内存。我们还使用了第三个API,有时需要刷新。您好-应用程序池“缓存”不崩溃ASP.NET以什么方式缓存它?您可以在其中包含一些代码,您可以看到这个缓存值被返回吗?嗨,Ashley-在我的代码中,我使用“HttpContext.Current.Request.Url”来获取基本Url。这有时会返回错误的url(请参阅我上面的问题)-此外,如果我使用“~/mypage.aspx”生成asp.net链接,~”可能会解析为错误的url。您确定IIS中的站点绑定正确吗?IIS根目录>站点>右键单击>编辑绑定。有什么奇怪的事吗?谢谢你评论《胡子骆驼》:——你的建议只是一种变通。我能够以类似的方式解析我的链接,但我更感兴趣的是找出IIS为什么这样做以及如何防止它,而不是解决它。我已经添加了URL重写来帮助解决这个问题,但我真的希望我知道如何防止它。好吧,这不是一个真正的解决办法,它更符合干性以及不硬编码的东西。不过现在我明白你的问题了。听起来像是IIS安装问题。如果你发布你的IIS设置,我将非常乐意看一看并尝试提供帮助。