代码之家  ›  专栏  ›  技术社区  ›  Paddy

全局asax-获取服务器名称

  •  13
  • Paddy  · 技术社区  · 15 年前

    有人能告诉我在global.asax的应用程序启动事件中是否有方法获取我站点的域名吗?

    通常我只从context.request.servervariables[“server_name”]获取它,但这不可用。理想情况下,我也希望从启动应用程序的请求中获取URL。


    嗯-从下面的答案来看,在iis7上似乎会有所不同。这是新的,现在有设计指南来阻止你这样做:

    IIS Blog

    6 回复  |  直到 8 年前
        1
  •  21
  •   jacroe jkj    9 年前

    您可以访问 Context 通过静电 HttpContext.Current 成员。

    HttpContext.Current.Request.ServerVariables["SERVER_NAME"];
    HttpContext.Current.Request.Url;
    

    编辑,根据你的一些评论,我做了一些额外的研究

    此错误是由于iis7集成管道中的设计更改导致请求上下文在应用程序启动事件中不可用。当使用经典模式(在以前版本的IIS上运行时的唯一模式)时,请求上下文过去是可用的,即使应用程序启动事件始终被设计为应用程序生命周期中的全局和请求不可知事件。尽管如此,因为ASP.NET应用程序总是由应用程序的第一个请求启动的,所以它过去可以通过静态httpcontext.current字段访问请求上下文。

    所以你有两个选择

    1. 将应用程序代码更改为不使用请求上下文(推荐)。
    2. 将应用程序移动到经典模式(不推荐)。

    http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart/

        2
  •  16
  •   Vinz    15 年前

    您的Web应用程序可以在多个不同的域下运行。因为在 Application_Start 事件,您无法知道将在哪个域下调用应用程序。

    但是,您可以使用 System.Environment.MachineName .

        3
  •  4
  •   Luk    15 年前

    我猜你在7号公路上?因为HTTPContext在IIS 6.0上可用。

    你能考虑以后再填写这些信息吗?第一次呼叫 Application_BeginRequest 例如?

        4
  •  3
  •   Matt Roy    8 年前

    在vb.net和global.asax中,我使用以下命令:

    Hosting.HostingEnvironment.ApplicationHost.GetSiteName
    

    它对应于IIS中的应用程序名称。

    更新: 似乎“GetSiteName”方法不打算直接调用,它在Visual Studio 2015中不再适用(或者可能是因为我更改了框架版本)。我将其替换为:

    System.Web.Hosting.HostingEnvironment.SiteName
    
        5
  •  0
  •   gg.    15 年前

    您是否可以访问请求对象?如果是的话,我想你可以用 Request.Url.Authority

    它将返回您要查找的DNS主机名。

    G

        6
  •  -3
  •   Plip    15 年前

    你试过了吗?

    System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"]
    

    谢谢,

    Phil。