在启动期间获取Web应用程序的URI

Gab*_* S. 5 asp.net iis asp.net-mvc asp.net-web-api

我需要在启动该应用程序之后但在可能未收到任何客户端请求之前,找出IIS 7.5+中托管的ASP.NET Web API应用程序的基本URI。我需要的场景如下:通过独立于用户请求运行的计时器执行定期检查,该计时器与应用程序启动(相同的过程)一起触发;如果此检查通过某些条件,则某些注册用户将收到一封电子邮件,其中包含指向我的Web应用程序的超链接。现在,我不想对链接进行硬编码,而是从Web应用程序本身动态获取它。从客户端请求的上下文中找出它,然后将其缓存在内存中会很简单,但是,正如您可以想象的那样,计时器可能会在任何请求到达服务器之前关闭。

然后如何正确确定应用程序的基本URI?Global.asax.cs在Web应用程序启动期间,我一直认为最合适的位置是文件,但找不到任何有用的东西。

Mat*_*ser 6

给定一个完整的 URL,例如“ http://mydomain.com/MyApplication/Controller/Action ”,您可以从System.Web.Hosting.HostingEnvironment.ApplicationHost对象中获取一些此类信息。您可以获得以下信息:

  • ApplicationVirtualPath -> "/MyApplication"
  • 站点名称 =>“默认网站”

但是,在实际请求到来之前,您将无法获得域名。这是因为 IIS 网站可以接受对许多不同域的请求,其中一些域只能通过 DNS 知道并且从未在任何地方配置过。

例如,您的网站可以同时响应mydomain.comwww.mydomain.com。您想放入链接中的哪个是正确的?

您可以将 IIS 网站配置为仅接受请求特定主机但无法从 ASP.NET 应用程序检索的连接。