2012-03-07 13 views
2

私のMVC Webアプリケーションでは、アプリケーションが自分のマシン上で動作しているかどうかを確認するためにRequest.IsLocalをチェックしています - もしそうであれば、アプリケーションの残りの部分に 'Debugモード'。HttpRequestはいつ作成されますか?

問題は、このチェックをいつ行うのかわかりません。

私はこのように、()の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オブジェクトがまだ初期化されていない、です。私は、Requestオブジェクトを初期化しますない場合、着信要求は任意の経路に

と一致していません

を言うHttpExceptionだから、私の質問があり、そしてある種のイベントは私ができることがあり得ますRequestオブジェクトの準備が整った後でこのチェックを実行するにはどうすればいいですか?

+2

(これは 'Request'が作成された場合の純粋な理解のために)これを行います:http://blog.codeville.net/2007/11/20/aspnet-mvc-pipeline-lifecycle/ – sellmeadog

答えて

2

Application_Start()は、MVCサイトのアプリケーションプールがスピンアップしたときに起動します。それは本当に "要求"オブジェクトについて知りません。したがって、これはアプリケーション全体に何かを設定する正しい場所ですが、Request.IsLocalで行うことはできません。あなたは別のstragegyを使用する必要があります。マシン名を使用する@ Jasonの提案は良い選択です。

リクエストごとにRequest.IsLocalを確認する場合は、Application_BeginRequestのメソッドのハンドラをglobal.asaxに記述してください。詳細については、thisを参照してください。

+1

Jasonとdotjoeは優れたアイデアを提供しましたが、リクエストオブジェクトにアクセスする必要があるときの答えがわかりました。 – Slider345

3

これを行うには、System.Environment.MachineNameをチェックするのがおそらく良い方法でしょう。

+0

+1。 Web.configにマシンのリストを追加してチェックすると、柔軟性が増します。 –

0

チェックbool isLocal = HttpContext.Current.Request.IsLocal;なくApplication_Start

には、それが役立つことがあります。Global ASAX - get the server name

0

要求とHttpContext.Currentは(もそれはそれは本当にないシングルトンオブジェクトのように見えるかもしれません)リクエストごとに作成されます。だから、アプリケーション全体の設定をしたい場合 - Application_Startは適切な場所ですが、リクエストをそこに置く必要はありません(同じマシンからのリクエストは常に必要としないので間違った場所でも)。

関連する問題