0

因为我试图通过使用QueryStringas data to evaluate 来测试/调试我的应用程序。

我试图通过会话变量实现相同的方法

在我关于 QueryStrings 的另一篇文章中,我正在寻找一种通过辅助方法操作 QueryString 的方法。

现在我正在尝试使用与 QueryStrings 相同的方法继续并尝试对会话变量进行相同的操作

代码是

    public static class Sesion
    {
    public sealed class Act
    {
    public const string edit = "edit", add = "add", remove = "remove", replace = "replace";
    }

            public static void Modify(string action, string New_Value, string CurSes_ParamName, string NewSession_paramName = null, bool redirectWithNewQuerySettings = false)
            {

                #region <<=========== reflect to readonly & set QueriString ReadOnly - false ============>>



                //HttpContext.Current.Request.QueryString["qs_key"]; 

                // reflect to readonly property 
                PropertyInfo isReadOnly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);

                // make collection editable 
                isReadOnly.SetValue(HttpContext.Current.Session, false, null);

                #endregion
                switch (action)
                {
                    case Act.remove:
                        if (itsNotAnEmptySession())
                            HttpContext.Current.Session.Remove(CurSes_ParamName);
                        break;
                    case Act.replace:
                        HttHttpContext.Current.Session.Remove(CurSes_ParamName);
                        HttpContext.Current.Session.Add(NewSession_paramName , New_Value);
                        break;
                    case Act.edit:
                        HttpContext.Current.Session.Set(CurSes_ParamName, New_Value);
                        break;

                    case Act.add:
                        HttpContext.Current.Session.Add(NewSession_paramName , New_Value);
                        break;

                }



                isReadOnly.SetValue(HttpContext.Current.Session, true, null);

            }
        }
}

我上线时尝试将只读值设置为 false 的错误:因为我对 .net 的经验还不够丰富,所以我不明白我哪里出错了,或者……完全不可能在会话变量。

Object does not match target type.

在 QueryString 上尝试并使用此方法很好,就像在这行代码中一样:

isReadOnly.SetValue(HttpContext.Current.Request.QueryString, false, null);
4

1 回答 1

2

你不能对 session 做同样的事情:

首先,Http.Current.Session不是NameValueCollection(like QueryString),而是HttpSessionState (它解释了你的Object does not match target type消息)

然后,HttpSessionState有一个IsReadonly属性,但是......它是只读的(你不能设置它)。当IsReadonly属性 fromNameValueCollection是可设置的。

所以......没办法(至少这样)。

于 2012-10-05T19:24:23.400 回答