2017-02-10 10 views
0

コントローラのアクションメソッドをGlobal.asax.csから呼び出そうとしています。 )(私はGlobal.asaxの中に予期せずにIISのシャットダウンがglobal.asaxからの呼び出しアクションメソッド

protected void Application_End() 
     { 
      var s_activityGuid = Guid.NewGuid(); 

       try 
       { 

        System.Web.ApplicationShutdownReason shutReason = System.Web.Hosting.HostingEnvironment.ShutdownReason; 
        string shutMessage = string.Empty; 
        //var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext); 
        var routeData = new RouteData(); 
        routeData.Values["controller"] = "ErrorRouting"; 
        routeData.Values["action"] = "ErrorInsert"; 

        if (shutReason == System.Web.ApplicationShutdownReason.BinDirChangeOrDirectoryRename) 
        { 
         shutMessage = "There is a shut down because of change to the Bin folder or files contained in it."; 
         routeData.Values["Id"] = 1; 
         routeData.Values["severity"] = "Error"; 
         routeData.Values["description"] = shutReason; 
         routeData.Values["details"] = shutMessage; 
         IController routeController = new ErrorRoutingController(); 
         var rc = new RequestContext(new HttpContextWrapper(Context), routeData); 
         diagnosticController.Execute(rc); 
         //Response.Redirect(urlHelper.Action("ErrorInsert", "ErrorRouting",new { Id=1200, severity= "Error", description= shutReason, details= shutMessage })); 
        } 

        log.WriteEntry(shutMessage, EventLogEntryType.Error); 

       } 
       catch (Exception ex) 
       { 

       } 
      } 
     } 

私はResponse.Redirectをとcontroller.excuteで試してみましたイベントをキャプチャする必要が

[HttpGet] 
    public async Task<ActionResult> ErrorInsert(int Id, string severity, string description,string details) 
    { 
     return new EmptyResult(); 

    } 

:ここ

は私actionMethodですアプローチ。

どちらの場合も、HttpContextをNullとして取得していますが、失敗しています。

上記のアクションメソッドを呼び出し、Application_End()メソッドで実行を続ける必要があります。

どうすればいいのか教えてください。

なぜHttpContextがnullになるのかわかりません。

+0

あなたの情報を記録するアクションメソッドである必要があるのはなぜですか?なぜそれは単に普通の方法を呼び出すことができないのですか? – Luke

+0

実際にアクションメソッドを呼び出す必要はありません。しかし、あなたがそうしたい場合は、C#コードからAPI呼び出しや呼び出しを行います。 HttpClientを使用して呼び出すことができます。 – Pavvy

+0

アクションメソッドから、私はデータベースに挿入するApiの呼び出しを行っています。 –

答えて

3

Application_Endはアプリケーションレベルのイベントで、要求ごとに実行されません。これは、HttpContextを要求コンテキストに関連付けられていないため、nullとしてHttpContextを取得している理由です。

関連する問題