在我的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对象准备好之后是否有一些我可以处理以便运行此检查的事件?
答案 0 :(得分:3)
检查System.Environment.MachineName
可能是更好的方法。
答案 1 :(得分:2)
也许使用web.config调试模式来确定这个?
答案 2 :(得分:2)
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是正确的位置,但你不会在那里有请求对象(即使你是错误的地方,因为不需要来自同一台机器的请求)。