使用c#如何从经典的ASP内部请求转换.QueryString转换为NameValueCollection

本文关键字:转换 请求 内部 QueryString NameValueCollection ASP 经典 使用 | 更新日期: 2023-09-27 17:50:35

我正在尝试在c#中使用经典ASP内部对象。通过使用ASPTypeLibrary

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

我该怎么做?

使用c#如何从经典的ASP内部请求转换.QueryString转换为NameValueCollection

我想转换请求。QueryString和Request。将对象形成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();
   }

所以你不需要转换它们

"convert"是什么意思?这两个属性 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中的所有内容(直到第一个#表示片段的开始,或URI的结束,无论哪个先到)都是查询:其解释完全取决于权限其URI。遗憾的是,微软的HttpRequest类为您做了决定。

旧的帖子,但也许有人仍然需要一个答案,这个和如何访问不同的内容从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();