Global ASAX - 获取服务器名称

Pad*_*ddy 14 .net asp.net asp.net-mvc iis-7

任何人都可以告诉我,是否有办法让我在global.asax的Application_Start事件中获取我的网站的域名?

通常我只是从Context.Request.ServerVariables ["SERVER_NAME"]中获取它,但这不可用.理想情况下,我还希望从启动应用程序的请求中获取URL.


嗯 - 从下面的答案来看,似乎在IIS7上有所作为.这是新的,现在有设计指南试图阻止你这样做:

IIS博客

Bob*_*Bob 22

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

HttpContext.Current.Request.ServerVariables["SERVER_NAME"];
HttpContext.Current.Request.Url;
Run Code Online (Sandbox Code Playgroud)

编辑,基于您的一些评论,我做了一些额外的研究

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

所以你有两个选择

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

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

  • 如果我这样做,我会收到运行时错误,指出请求在此上下文中不可用.资格没有区别. (4认同)
  • 我认为Application_Start中没有HttpContext (2认同)
  • @Luk - HttpContext.Current是一个静态成员.无论你在哪个范围都没关系.它就在那里.如果您遇到问题,请完全限定System.Web.HttpContext.Current (2认同)

Vin*_*inz 17

您的Web应用程序可以在多个不同的域下运行.由于Application_Start事件中没有当前请求,因此您无法知道应用程序将在哪个域中调用.

但是,您可以找到使用的机器名称System.Environment.MachineName.


Luk*_*Luk 5

我猜您正在使用IIS 7?因为Http6.0在IIS 6.0上可用。

您以后可以考虑填写这些信息吗?以第一个电话Application_BeginRequest为例?