Asp.net ASP Classic:url参数的请求函数不起作用?

Asp.net ASP Classic:url参数的请求函数不起作用?,asp.net,forms,asp-classic,request,Asp.net,Forms,Asp Classic,Request,我通常不处理我们网站的旧ASP页面。我没有更改这些页面中的任何代码。但是突然之间,所有带有请求(“param”)的页面都无法正确加载 这就是它的基本结构。我的所有页面都包含一些其他.asp文件。在每一个页面的末尾,我都写了一些类似于response.write(“test”)的东西,以确保页面的执行过程顺利完成。然后在我的页面上,我尝试访问,在所有包含response.write(“test”)之后的第一行尝试,然后显示测试消息。然而,如果我在前面添加语句request(“param”)BIM!

我通常不处理我们网站的旧ASP页面。我没有更改这些页面中的任何代码。但是突然之间,所有带有
请求(“param”)
的页面都无法正确加载

这就是它的基本结构。我的所有页面都包含一些其他.asp文件。在每一个页面的末尾,我都写了一些类似于
response.write(“test”)
的东西,以确保页面的执行过程顺利完成。然后在我的页面上,我尝试访问,在所有包含
response.write(“test”)
之后的第一行尝试,然后显示测试消息。然而,如果我在前面添加语句
request(“param”)
BIM!没有显示测试消息

我不知道它可能是什么,甚至不知道如何调试它。你有什么建议吗

同样,我没有更改任何ASP代码,它工作正常。我唯一能想到的就是在服务器上添加了一个新网站,并创建了一个新网站的绑定。但我没有添加任何绑定到ASP页面所在的先前网站。我不知道这是否有关联。这也只发生在我们的测试服务器上。制作网站运行良好

编辑:我注意到一个服务器错误,说应用程序池'local.website1.com'的模板持久缓存初始化失败,原因是以下错误:无法为应用程序池创建磁盘缓存子目录。数据可能有其他错误代码。这可能与此相关吗

编辑:我刚刚尝试通过
request.QueryString(“param”)
更改
request(“param”)
,这很有效,但我不想编辑我有
request
的每个页面。这是怎么发生的

编辑:我试过的另一件事。我清空了我现在只有一页的页面

<% 
  request("param")
  response.write("test")
%>

我从上一页的链接访问该页。在带有链接的页面上,我不会显示测试消息。但是,如果我返回浏览器中的url并按enter键(直接访问页面,而不是像链接一样),它将显示“test”。我应该调查上一页吗?它是否与参数传递有关

编辑:还有一件事要做。
在我的页面A pagea.aspx上,我有指向myasppage.asp?param=value的链接,我创建了两个链接。一个是
asp:linkbutton
,我在其中设置
postBackUrl=myasppage.asp?param=value在后面。另一个链接是
asp:hyperlink
,我在这里设置
navigateUrl=myasppage.asp?param=value。超链接控件中的链接起作用。linkButton中的链接不起作用。

如果您想使用速记请求(“param”)而不是长格式的request.querystring(“param”)或request.form(“param”),那么您需要记住,这种速记方法不仅在编码方面很草率,而且还可能导致类似您所遇到的问题

我不确定事情的确切顺序。但我认为请求(“param”)将首先检索querystring params,然后是表单,然后是cookies。(我可能对那个订单错了)。因为这在编程方面不好,所以说您使用request(“fname”)而不是request.form(“fname”)从提交的表单获取数据。但是url是form.asp?timestamp=234234。ASP将跟踪querystring参数,“fname”将为空,因为它不存在于querystring中。ASP不够聪明,无法在所有三个(表单、查询字符串、cookies)对象中查找参数

或者将代码清理到request.form/request.querystring。或者进一步调查以确保不适用于您的URL中没有隐藏的查询字符串。如果启用了IIS重写规则,甚至可能会出现查询字符串,这会为您提供漂亮的URL

请尝试以下代码来调查哪些变量起作用:

<%
      Response.Write ("<b>All form Variables</b><br>")
       For Each Item In Request.Form
        xName = Item
        xValue = Request.Form(Item)
        Response.Write("Name: " & xName & " | Value: " & xValue & "<BR>" )     
       Next 

       Response.Write ("<BR><b>All QuersyString Vars</b><br>")
       For Each Item In Request.Querystring
        xName = Item
        xValue = Request.Querystring(Item)
        Response.Write("Name: " & xName & " | Value: " & xValue & "<BR>" ) 
       Next 

 %>


如果上面的代码最终为您提供了Form和Querystring变量(在相关页面上),那么您就知道ASP存在问题,不知道您使用的是什么对象

这篇文章太多,无法发表评论,所以我会将其作为答案发布。我希望你不介意再做一次测试。Frank建议启用详细错误()。如果您还没有这样做,请这样做。在问题的前面,您指出以下代码失败

<% 
  request("param")
  response.write("test")
%>

请将以下调试行添加到测试中

<% 
  on error resume next 
  request("param")
  response.write "<br />Error number " & Err.number
  response.write "<br />Error description" & Err.Description
%>

希望这能让我们更详细地了解问题所在。我怀疑你调查你发现的错误是对的。我发现了一些关于这个问题的帖子,你可能想看看


这两个站点引用此站点:

经典ASP的应用程序池需要在经典模式下运行,而不是在集成模式下运行。如果新网站当前使用与网站1相同的应用程序池,请为其创建新的应用程序池

我通过搜索“经典ASP中的请求表单停止工作”或类似的内容来唤起记忆


我很抱歉没有早点想到这一点。至少我之前的回答是调试方面的一堂好课。我希望你不需要花太多时间来恢复脱发。

你真的在新网站上启用了经典asp吗?IIS7及以上版本默认不启用它?@John我的意思是服务器上已经创建并添加了一个新网站。但是在这里,我试图访问第一个网站上的asp页面,该网站已经有了功能性asp页面。为了澄清经典asp是否已启用和工作属性,您需要使用速记请求(“param”)与request.querystring(“”)或request.form(“”)进行比较?@Frank代码一直使用
请求
,仅此而已。这也是它在prod服务器上的工作方式。我相信经典的ASP是启用的,因为我有时可以看到一些东西