C# 什么时候创建HttpRequest?

C# 什么时候创建HttpRequest?,c#,asp.net-mvc,asp.net-mvc-routing,global-asax,C#,Asp.net Mvc,Asp.net Mvc Routing,Global Asax,在我的MVC web应用程序中,我正在检查Request.IsLocal以查看应用程序是否在我的计算机上运行——如果是,我设置了一个全局静态变量,它告诉我的应用程序的其余部分我处于“调试模式” 问题是,我不知道什么时候做这个检查 我尝试在Application_Start()下的global.asax.cs文件中这样做: protected void Application_Start() { if (Request.IsLocal) isDebug = true;

在我的MVC web应用程序中,我正在检查Request.IsLocal以查看应用程序是否在我的计算机上运行——如果是,我设置了一个全局静态变量,它告诉我的应用程序的其余部分我处于“调试模式”

问题是,我不知道什么时候做这个检查

我尝试在Application_Start()下的global.asax.cs文件中这样做:

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

    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);
    ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}
问题是,请求对象尚未初始化。我得到一个HttpException,它说

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


我的问题是请求对象什么时候初始化,在请求对象准备好后,我是否可以处理某种事件来运行此检查?

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

检查
bool isLocal=HttpContext.Current.Request.isLocal但不在
应用程序启动中


这可能会有帮助:

是否可以使用web.config调试模式来确定这一点


请求和HttpContext.Current是根据请求创建的(它可能看起来像是单例对象,但实际上不是)。因此,如果您想设置应用程序范围的配置,那么application_Start是正确的位置,但是您不会在那里设置request对象(即使您会这样做,它也是错误的位置,因为请求不一定总是来自同一台机器)

当MVC站点的应用程序池启动时,应用程序启动()。它并不真正了解“请求”对象。因此,即使这是在应用程序范围内设置某些内容的正确位置,您也无法使用
Request.IsLocal
。你必须使用不同的策略@Jason建议使用机器名是一个很好的选择


如果要为每个请求检查
Request.IsLocal
,请在global.asax中为应用程序_BeginRequest的方法编写一个处理程序。有关更多信息,请参阅。

+1。将机器列表添加到Web.config并对照它进行检查可能会使其更加灵活。这是否有帮助(仅就理解创建
请求时的情况而言):Jason和dotjoe提供了很好的想法,但您的回答为我澄清了何时应访问请求对象。