从global.asax调用action方法

时间:2017-02-10 11:14:31

标签: c# asp.net-mvc asp.net-mvc-4

我试图从Global.asax.cs调用控制器的动作方法。

这是我的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并且它失败了。

要求是它应该调用提到的action方法并继续在Application_End()方法中执行。

请让我知道我该怎么做。

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

1 个答案:

答案 0 :(得分:3)

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