0

ASP WebForms でHttpContext.Current.Session、リクエストがカスタムIRouteHandler.

カスタム内の Session オブジェクトにアクセスする方法について人々がアドバイスしている多くの回答を見てきましたIRouteHandlerが、これは私の問題ではありません。ハンドラーでセッションオブジェクトにアクセスする必要はありません。そのハンドラーを使用するときに null にしたくないだけです。

カスタム ハンドラのコードは次のとおりです。

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;
    }
}

誰にもアイデアはありますか?

ありがとう

4

1 に答える 1

0

構成の問題でした。AppPool は v4.0 統合として設定されていましたが、v2.0 クラシックである必要がありました。

于 2016-01-22T13:10:25.653 に答える