ASP经典:请求函数的URL参数不工作?

问题描述:

我通常不会处理我们网站的旧ASP页面。我没有改变这些页面中的任何代码。但突然之间,所有带有request("param")的页面都无法正确加载。ASP经典:请求函数的URL参数不工作?

这基本上是它的结构。我所有的网页都包含一些其他的.asp文件。在他们每个人的最后我写了类似response.write("test")的东西,以确保页面的执行正在进行并且完成。然后在我的页面上尝试访问,我在第一行尝试所有包含内容response.write("test"),并显示测试消息。尽管如此,如果我在此之前添加BIM!request("param")!没有显示测试消息。

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

同样,我没有改变任何ASP代码,它工作正常。我能想到的唯一的事情是我在服务器上添加了一个新网站,并且我为该新网站创建了一个绑定。但我没有添加任何绑定到以前的ASP页面的网站。我不知道它是否相关。这也只发生在我们的测试服务器上。生产网站工作正常。

编辑:我注意到服务器错误说The Template Persistent Cache initialization failed for Application Pool 'local.website1.com' because of the following error: Could not create a Disk Cache Sub-directory for the Application Pool. The data may have additional error codes.可能是相关的?

编辑:我只是试图改变request("param")Request.QueryString("param")和这个工作,但我不想编辑每一个页面,我有request。这是怎么回事......

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

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

我从上一页的链接访问该页面。通过链接进入我的页面,我不会显示测试消息。但是如果我回到浏览器中的网址并按下回车键(直接访问页面,而不是链接),它将显示“测试”。我应该调查上一页吗?它是通用链接到参数传递?

编辑:完成一件事。 在我的页面pagea.aspx我有我的链接myasppage.asp?param = value,我创建了两个链接。一个是asp:linkbutton,我在后面设置了postBackUrl = myasppage.asp?param=value;。另一个链接是asp:hyperlink,我设置了navigateUrl = myasppage.asp?param=value;。超链接控件的链接工作。 linkBut​​ton的链接不起作用。

+1

你是否真的在新网站上启用了经典的asp?它在IIS7和更高版本上默认不启用? – John 2014-10-02 18:58:40

+0

@John我的意思是一个新的网站已经制作并添加到服务器上。但在这里,我试图访问第一个网站上的asp页面,这已经在这里与功能asp页 – Greg 2014-10-02 19:03:45

+0

只是为了阐明经典的ASP是启用和工作属性,你问题是,你想使用速记请求(“参数”) request.querystring(“”)或request.form(“”)??? – Frank 2014-10-02 19:08:24

如果您希望使用速记请求(“param”)与长格式request.querystring(“param”)或request.form(“param”),那么您需要记住这种简写方法不仅在编码方面很琐碎,而且还会导致像你一样的问题。

我不确定事情进行到什么顺序。但我认为请求(“参数”)将首先检索查询字符串参数,然后形式,然后cookie。 (我可能对这个顺序错了)。在编程方面不好的地方,说你使用request(“fname”)而不是request.form(“fname”)从提交的表单获取数据。但网址是form.asp?timestamp = 234234。 ASP会在查询字符串参数和“fname”将变空之后进行,因为它不存在于查询字符串中。 ASP不够智能,无法在所有三种(表单,查询字符串,cookie)对象中搜索参数。

清理你的代码到request.form/request.querystring。或者进一步调查以确保那些不适合你的网址没有隐藏querystrings在其中。查询字符串甚至可能会显示,如果你有一个IIS重写规则启用,它给你漂亮的网址。

试试这个代码来调查什么变量工作:

<% 
     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 

%> 

如果上面的代码最终给你两个窗体和查询字符串变量(有问题的网页),那么你知道你有ASP的问题不知道你正在使用什么对象。

+0

谢谢你的回答。在那种情况下,为什么这个代码仍然在prod服务器上工作?另外我在这里使用非常简单的代码。我从一个aspx页面开始,最终在一个带有一个参数的url页面和两行代码的asp页面中。 'response.write(request(“nUser”))response.write(“greg
”)'我在页面中看不到任何隐藏字段。我怎样才能进一步调查网址的隐藏领域? – Greg 2014-10-02 19:19:23

+0

首先,创建一个名为test.asp的文件。 如果这样做的话,那么你知道配置你的本地机器运行传统的asp并不是一个问题(clasic asp默认情况下是未启用的)。如果这是有效的,那么你可能有一个问题,即ASP不知道你是否想要请求表单或请求查询字符串,因为你没有告诉它哪一个。所以ASP为你猜测,猜测是错误的。调查这个最简单的方法是添加一段代码来写出所有的Request.Form和Request.Querystring参数。 – Frank 2014-10-02 19:22:45

+0

查看我的示例代码,您可以列出所有表单/查询字符串变量。 – Frank 2014-10-02 19:29:14

这是太多的评论文本,所以我会张贴它作为答案。我希望你不要介意再做一次测试。弗兰克建议启用详细的错误(enable detailed errors in IIS)。如果你还没有这样做,请这样做。在您的问题的早期,您指出以下代码失败。

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

请folloiwng调试行添加到测试

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

希望这将能给我们介绍一下是什么问题了一些更多的细节。我怀疑你调查你发现的错误是正确的。我发现了一些关于您可能想要查看的问题的文章。

这两个网站引用本站:Template Persistent Cache initialization failed for Application Pool" on IIS 7 using Classic ASP

+0

谢谢你。我启用了详细的错误并尝试了该脚本。我的页面保持空白...我尝试了'request(“param”);'只是看到它并显示'Microsoft VBScript编译错误'800a0401'预期的语句结束'。与此同时,我在你提供的链接之后解决了服务器错误。但仍然。 – Greg 2014-10-06 20:50:13

+0

虽然我们正在取得进展!编译错误是分号。我的错误是第一行。请将其更改为'错误恢复下一个'此外,请确认IIS修复服务器错误后重新启动。 – lurker 2014-10-07 13:34:56

+0

我的不好,我把脚本粘贴错了。两条指令都在同一行。它实际上全都是空白的页面结果。没有错误发生。丢掉我的头发...... – Greg 2014-10-07 13:39:30

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

我慢慢搜索“请求表单在经典ASP停止工作”或类似的东西。

我很抱歉没有考虑过此事。至少我以前的回答在调试中是一个很好的教训。我希望你不会需要太多的Rograine来减少脱发。

+0

它是真的吗?它似乎工作。但只有几个问题。该网站有aspx和asp页面。它会不会影响aspx页面?还有任何想法,为什么这个设置已经改变,以便asp页面被关闭? – Greg 2014-10-08 13:14:08

+0

同样在prod服务器上,asp页面工作正常,应用程序池被设置为集成。有什么理由呢? – Greg 2014-10-08 13:25:09

+0

好问题。我工作的网站使用Classic模式下的应用程序池运行.Net 3.5和Classic ASP,没有任何问题。这里有一些链接与体面的解释的差异http://*.com/questions/716049/what-is-the-difference-between-classic-and-integrated-pipeline-mode-in-iis7和http:// www.hanselman.com/blog/MovingOldAppsFromIIS6ToIIS8AndWhyClassicModeExists.aspx – lurker 2014-10-08 17:42:44