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对象准备好后处理以运行此检查?
检查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-获取服务器名称