【问题标题】:How do I get the host domain name in ASP .NET without using HttpContext.Current.Request?如何在不使用 HttpContext.Current.Request 的情况下获取 ASP .NET 中的主机域名?
【发布时间】:2011-01-11 23:03:43
【问题描述】:

我有一个在 IIS7 上运行的 ASP .Net 应用程序。我正在使用该站点正在运行的当前 url 在我的应用程序中的类上设置一些静态属性。为此,我使用这个(在类的静态构造函数中)获取域名:

var host = HttpContext.Current.Request.Url.Host;

它在我的开发机器(Windows XP / Cassini)上运行良好。但是,当我部署到 IIS7 时,出现异常:“请求在此上下文中不可用”。

我猜这是因为我在对象的静态构造函数中使用了这段代码,该对象在任何请求进入之前在 IIS 中执行;并且 Cassini 在请求发生之前不会触发静态构造函数。现在,我原本不喜欢从 Request 中提取域名的想法,但这是我唯一找到它的地方 =)

那么,有谁知道我可以获取主机域名的其他地方吗?我假设 ASP .Net 必须在独立于 HttpRequests 的某个级别上意识到它,我只是不知道如何访问它。

【问题讨论】:

    标签: asp.net url dns


    【解决方案1】:

    改用这个:

    HttpRuntime.AppDomainAppVirtualPath
    

    或者如果你想要物理路径:

    HttpRuntime.AppDomainAppPath
    

    进一步阅读:

    http://weblogs.asp.net/reganschroder/archive/2008/07/25/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-application-start.aspx

    【讨论】:

    • 这只会给你路径,而不是域。
    【解决方案2】:

    使用 global.asax 或编写一个 HttpModule 并订阅启动请求事件。您会将请求传递到您的事件处理程序中。

    【讨论】:

      【解决方案3】:

      域在请求中的原因是......这就是所要求的。例如,这些是来自http://www.stackexchangesites.com/ 的一些 stackexchange 站点:

      如果您对它们执行 ping 操作,您会看到它们都指向同一个 IP/Web 服务器并由同一个应用程序提供服务(在这种情况下是多个应用程序,但如果它是一个大应用程序,则该示例仍然有效).. .但是应用程序不知道是哪一个,直到host header 与请求服务器请求该站点的请求一起出现。每个请求可能针对不同的域...所以应用程序不知道它。

      如果它没有改变,您可以将其作为 appSetting 存储在 web.config 中。

      【讨论】:

      • 啊,对,那么我真正应该做的不是在静态构造函数中初始化这些东西。事实上,如果我想要安全,我什至不应该让我的值是静态的——我应该在每次请求时再次查找它们,以防我收到来自多个域的请求(在我的情况下,我不会t,但最好知道这一点)。感谢您的帮助 - 不幸的是,现在我应该重构这个遗留应用程序的大部分内容,而不是我想要的 =)
      猜你喜欢
      • 2010-10-14
      • 2012-02-08
      • 2012-11-09
      • 2016-06-01
      • 1970-01-01
      • 2019-12-29
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多