我试图在global.asax的application_start事件中使用http上下文(在Httpcontext.current的帮助下),然后您将收到一个错误: - HttpContext.Current请求在此上下文中不可用。
通过使用静态构造函数可以轻松地解决问题,在首先访问对象时会触发该构造函数。我们可以在Application_Beginrequest事件中保留一个标志,并轻松确定初始化应用程序的请求。
但在这种情况下,它会在每次请求时创建,这对我来说并不是必需的。我想创建或访问Httpcontext.current一次
我的守则如下: -
`//var context = new HttpContextWrapper(HttpContext.Current);
//var routeData = RouteTable.Routes.GetRouteData(context) ?? new RouteData();
//var requestContext = new RequestContext(context, routeData);
//var urlHelper = new UrlHelper(requestContext);
//var url = urlHelper.Action("Home", "Index");
var httpContext = new HttpContextWrapper(HttpContext.Current);
UrlHelper urlHelper = new UrlHelper(new RequestContext(httpContext, new RouteData()));
if (urlHelper.RequestContext.HttpContext.Request.IsLocal)
{
}
//if (((requestContext.HttpContext).Request).IsLocal)
//{
//}`
答案 0 :(得分:1)
集成模式下HttpContext
中没有HttpRequest
和App_Start
个实例。你必须解决这个问题。如果您确实需要在第一次请求时执行某些操作,请在global.asax中注册新的BeginRequest
处理程序,然后在完成后取消注册。