【问题标题】:Getting a web application's URI during startup在启动期间获取 Web 应用程序的 URI
【发布时间】:2013-06-03 21:11:05
【问题描述】:

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

然后我怎样才能正确确定应用程序的基本 URI?在网络应用程序启动期间,我认为最合适的位置是 Global.asax.cs 文件,但我找不到任何看起来有用的东西。

【问题讨论】:

    标签: asp.net asp.net-mvc iis asp.net-web-api


    【解决方案1】:

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

    • ApplicationVirtualPath -> "/MyApplication"
    • SiteName => "默认网站"

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

    例如,您的网站可以同时回复mydomain.comwww.mydomain.com。您想在链接中添加哪个正确的?

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

    【讨论】:

    • 非常感谢您的澄清!我担心可能是这种情况。因此,在我的场景中,我似乎必须在 web.config 中恢复使用硬编码的基本 URL,该 URL 必须根据应用程序的托管位置进行更改。
    猜你喜欢
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多