我需要在应用程序启动之后,但在任何客户端请求到达之前,找到IIS 7.5+中托管的ASP.NET Web API应用程序的基本URI。我需要这个的场景如下:通过独立于用户请求运行的计时器执行定期检查,该计时器与应用程序启动一起触发(相同的过程);如果此检查通过某些条件,则某些注册用户将收到一封包含我的Web应用程序超链接的电子邮件。现在,我不想在任何地方硬编码该链接,而是从Web应用程序本身动态获取它。从客户端请求的上下文中弄清楚它然后将其缓存在内存中很简单,但是,正如您可以想象的那样,在任何请求到达服务器之前,计时器可能会关闭。
我怎样才能正确确定应用程序的基本URI?我认为在网络应用启动期间最合适的地方是Global.asax.cs
文件,但我无法找到任何看起来有用的内容。
答案 0 :(得分:3)
给定完整的网址,例如“http://mydomain.com/MyApplication/Controller/Action”,您可以从System.Web.Hosting.HostingEnvironment.ApplicationHost
对象获取部分信息。您可以获得以下内容:
但是,在实际请求进入之前,您将无法获取域名。这是因为IIS网站可以接受许多不同域的请求,其中一些域只能通过DNS获知,并且从未在任何地方配置过。
例如,您的网站可以回复mydomain.com
和www.mydomain.com
。您想要在链接中添加哪个是正确的?
您可以将IIS网站配置为仅接受请求特定主机但无法从ASP.NET应用程序检索的连接。