首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网页表单-通过自定义IRouteHandler时会话对象为空

网页表单-通过自定义IRouteHandler时会话对象为空
EN

Stack Overflow用户
提问于 2016-01-22 18:48:38
回答 1查看 124关注 0票数 0

我在ASP WebForms中遇到了一个问题,如果我的请求通过一个自定义的IRouteHandler,那么HttpContext.Current.Session是空的。

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

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

代码语言:javascript
复制
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;
    }
}

有谁有主意吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-01-22 21:10:26

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34944855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档