我在ASP WebForms中遇到了一个问题,如果我的请求通过一个自定义的IRouteHandler,那么HttpContext.Current.Session是空的。
我见过很多关于如何访问自定义IRouteHandler中的会话对象的回答,但这不是我的问题。我不需要访问处理程序中的session对象,我只是不希望它在使用该处理程序时为空。
以下是自定义处理程序的代码:
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;
}
}有谁有主意吗?
谢谢
发布于 2016-01-22 21:10:26
这是一个配置问题。AppPool被设置为v4.0集成,而它应该是v2.0经典。
https://stackoverflow.com/questions/34944855
复制相似问题