使用C#我如何从Classic ASP Intrinsic Request.QueryString转换为NameValueCollection?

时间:2014-03-17 16:16:01

标签: c# asp-classic

我正在尝试在C#中使用Classic ASP Intrinsic对象。通过使用ASPTypeLibrary。

我想将经典ASP请求对象Request.QueryStringRequest.Form转换为NameValueCollections。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

  

我想将Request.QueryString和Request.Form对象转换为NameValueCollections。我怎么能这样做?

它们的返回类型都是NameValueCollection

  • public NameValueCollection QueryString { get; }
  • public NameValueCollection Form { get; }

您可以简单地预约它们,例如:

   PrintKeysAndValues(Request.Form);
   PrintKeysAndValues(Request.Request);


   public static void PrintKeysAndValues( NameValueCollection myCol )  {
      Console.WriteLine( "   KEY        VALUE" );
      foreach ( String s in myCol.AllKeys )
         Console.WriteLine( "   {0,-10} {1}", s, myCol[s] );
      Console.WriteLine();
   }

所以你不需要转换它们。

答案 1 :(得分:0)

你是什么意思"转换"?这两个属性都是 NameValueCollections

  • HttpRequest.Form是表单变量的NameValueCollection。如果页面是使用HTTP动词POST发布的,则数据来自请求正文;如果页面是使用HTTP动词GET发布的,则数据来自查询字符串。

  • HttpRequest.QueryString是从{等待它} NameValueCollection形式的查询字符串中获取的...?key1=value1&key1=value1&...个键/值对。任何重复的键都会导致值被连接成一个单独的字符串,每个单独的值用逗号分隔:...?foo=1&foo=2&foo=3将导致键foo具有值1,2,3

但是,应该注意,对于查询字符串,HTTP协议不会对查询字符串语法施加任何特定限制:?之后的URI中的所有内容(直到第一个{{1}指示片段的开头,或者URI的结尾,以先到者为准)是查询:它的解释完全取决于权限< / em>它的URI。可悲的是,微软的#课程为您做出决定。

答案 2 :(得分:0)

旧帖子,但也许有人仍需要对此进行回答,以及如何从ScriptingContext访问不同的内容。我花了将近一年的时间才弄清楚它是如何运作的......

此代码适用于我QueryString。在示例中,我再次将其构建为完整的字符串:

    foreach (var item in _scriptContext.Request.QueryString)
    {
      foreach (var q in _scriptContext.Request.QueryString[item])
        qs += item + "=" + q + "&";
    }
    if (qs.EndsWith("&")) qs = qs.Substring(0, qs.Length - 1);

在此背景下获取ServerVariables

    var uri = "";
    foreach (var item in _scriptContext.Request.ServerVariables["URL"])
      uri = item.ToString();

ApplicationSession返回内容直接

    var app_var = _scriptContext.Application["application_var"]
    var sess_var = _scriptContext.Session["session_var"]

读取cookie的方式如下:

    dynamic value = (IReadCookie)_scriptContext.Request.Cookies["cookieName"];
    var yourCookie = value.Item().ToString();