HttpRequest何时创建

本文关键字:创建 何时 HttpRequest | 更新日期: 2023-09-27 18:27:15

在我的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());
}

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

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

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

HttpRequest何时创建

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

Application_Start()在MVC站点的应用程序池启动时启动。它并不真正了解"请求"对象。因此,即使这是在应用程序范围内设置某些内容的正确位置,也无法使用Request.IsLocal进行设置。你将不得不使用不同的策略@Jason建议使用机器名称是个不错的选择。

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

也许可以使用web.config调试模式来确定这一点?

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

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

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

它可能会有所帮助:Global ASAX-获取服务器名称