什么时候创建HttpRequest?

时间:2012-03-07 19:23:35

标签: c# asp.net-mvc asp.net-mvc-routing global-asax

在我的MVC Web应用程序中,我正在检查Request.IsLocal以查看应用程序是否在我的机器上运行 - 如果是,我设置了一个Global静态变量,它告诉我的应用程序的其余部分我在'调试模式'。

问题是,我不知道何时进行此检查。

我尝试在application_Start()下的global.asax.cs文件中执行此操作,如下所示:

protected void Application_Start()
{
    if (Request.IsLocal)
        isDebug = true;

    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);
    ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}

问题是,Request对象尚未初始化。我得到一个HttpException,上面写着

  

传入请求与任何路由都不匹配

所以,我的问题是Request对象何时被初始化,并且在Request对象准备好之后是否有一些我可以处理以便运行此检查的事件?

5 个答案:

答案 0 :(得分:3)

检查System.Environment.MachineName可能是更好的方法。

答案 1 :(得分:2)

也许使用web.config调试模式来确定这个?

https://stackoverflow.com/a/542896/40822

答案 2 :(得分:2)

当您的MVC站点的应用程序池被启动时,

Application_Start()将触发。它并不真正了解“请求”对象。因此,即使这是在应用程序范围内设置某些内容的正确位置,您也无法使用Request.IsLocal执行此操作。你将不得不使用不同的策略。 @Jason建议使用机器名称是个不错的选择。

如果您想为每个请求检查Request.IsLocal,请在global.asax中为Application_BeginRequest的方法编写一个处理程序。有关详细信息,请参阅this

答案 3 :(得分:0)

检查bool isLocal = HttpContext.Current.Request.IsLocal;但不是Application_Start

这可能会有所帮助:Global ASAX - get the server name

答案 4 :(得分:0)

请求和HttpContext.Current是根据请求创建的(它也可能看起来像单例对象,它实际上不是)。因此,如果你想设置应用程序范围的配置 - Application_Start是正确的位置,但你不会在那里有请求对象(即使你是错误的地方,因为不需要来自同一台机器的请求)。