我试图从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?
答案 0 :(得分:3)
Application_End是应用程序级事件,它不会基于每个请求执行。这就是你将HttpContext作为null的原因,因为它没有绑定到请求上下文。