改变会话参数/变量

时间:2012-10-05 19:06:21

标签: c# debugging asp.net-4.0 session-variables

因为我试图测试/调试我的应用程序 使用QueryString作为评估数据。

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

在我的other post regarding 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);

1 个答案:

答案 0 :(得分:2)

你不能只对会话做同样的事情:

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

然后,HttpSessionState有一个IsReadonly属性,但是......它是readonly(你不能设置它)。来自IsReadonly的{​​{1}}属性可设置。

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