2017-02-10 101 views
0

我想从Global.asax.cs调用控制器的操作方法。来自global.asax的调用操作方法

这里是我的actionMethod:

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

    } 

我要捕捉时在Global.asax中IIS意外关闭

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试过事件()方法。

在这两种情况下,我都将HttpContext设置为Null并且失败。

要求是应该调用上述操作方法并在Application_End()方法中继续执行。

请让我知道我该怎么做。

我不确定为什么HttpContext会变为空?

+0

它为什么需要是一个记录您的信息的行动方法?为什么不能只是调用一个普通的方法? – Luke

+0

您不需要实际调用操作方法。但是,如果你想这么做,然后给一个API调用或呼吁从C#代码行动。你可以使用HttpClient进行调用。 – Pavvy

+0

从动作方法,我正在做一个Api调用插入到数据库。 –

回答

3

Application_End是应用程序级事件,它不会基于每个请求基础执行。这就是您将HttpContext设置为null的原因,因为它没有绑定到请求上下文。