2016-01-22 43 views
0

我在ASP WebForms中遇到问题,其中HttpContext.Current.Session为空,如果我的请求经过自定义IRouteHandlerWeb窗体 - 通过自定义IRouteHandler时会话对象为null

我见过很多答案,人们在如何访问自定义IRouteHandler内的会话对象的建议,但这不是我的问题。我不需要访问处理程序中的会话对象,我只是不希望它在使用该处理程序时为空。

这是自定义处理程序的代码:

public class LanguageRouteHandler : IRouteHandler 
{ 
    private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); 

    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     Logger.Debug("GetHttpHandler"); 

     //return new LanguageHttpHandler(this, requestContext); 

     string rest = requestContext.RouteData.Values["rest"] as string; 
     string destinationPath = ""; 

     string language = requestContext.RouteData.Values["language"] as string; 

     string queryString = "?"; 
     NameValueCollection queries = HttpContext.Current.Request.QueryString; 

     foreach (string myKey in queries.AllKeys) 
     { 
      queryString += (myKey + "=" + queries[myKey] + "&"); 
     } 
     HttpContext.Current.Items["qs"] = queryString.Substring(0, queryString.Length - 1); 
     if (rest == null || rest == "") 
     { 
      HttpContext.Current.Items["lng"] = language; 

      destinationPath = "~/Content.aspx"; 
      EasyUrlHelper.Current.OriginalPath = destinationPath.Replace("~/", ""); 

      HttpContext.Current.RewritePath(string.Concat("~/Content.aspx", queryString == "?")); 
      return BuildManager.CreateInstanceFromVirtualPath("~/Content.aspx", typeof(Page)) as Page; 
     } 
     else 
     { 
      if (rest.EndsWith("aspx")) 
      { 
       HttpContext.Current.Items["lng"] = language; 

       if (!rest.StartsWith("~/")) 
        destinationPath = "~/" + rest; 
       else 
        destinationPath = rest; 

       EasyUrlHelper.Current.OriginalPath = destinationPath.Replace("~/", ""); 

       HttpContext.Current.RewritePath(string.Concat(destinationPath, queryString == "?" ? "" : queryString)); 
       return BuildManager.CreateInstanceFromVirtualPath(destinationPath, typeof(Page)) as Page; 
      } 

     } 

     return BuildManager.CreateInstanceFromVirtualPath("~/404.aspx", typeof(Page)) as Page; 
    } 
} 

有没有人有一个想法?

谢谢

回答

0

这是一个配置问题。 AppPool被设置为v4.0集成,而它应该是v2.0 Classic。

相关问题