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;
。超链接控件的链接工作。 linkButton的链接不起作用。
如果您希望使用速记请求(“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的问题不知道你正在使用什么对象。
谢谢你的回答。在那种情况下,为什么这个代码仍然在prod服务器上工作?另外我在这里使用非常简单的代码。我从一个aspx页面开始,最终在一个带有一个参数的url页面和两行代码的asp页面中。 'response.write(request(“nUser”))response.write(“greg
”)'我在页面中看不到任何隐藏字段。我怎样才能进一步调查网址的隐藏领域? –
Greg
2014-10-02 19:19:23
首先,创建一个名为test.asp的文件。 如果这样做的话,那么你知道配置你的本地机器运行传统的asp并不是一个问题(clasic asp默认情况下是未启用的)。如果这是有效的,那么你可能有一个问题,即ASP不知道你是否想要请求表单或请求查询字符串,因为你没有告诉它哪一个。所以ASP为你猜测,猜测是错误的。调查这个最简单的方法是添加一段代码来写出所有的Request.Form和Request.Querystring参数。 – Frank 2014-10-02 19:22:45
查看我的示例代码,您可以列出所有表单/查询字符串变量。 – 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
%>
希望这将能给我们介绍一下是什么问题了一些更多的细节。我怀疑你调查你发现的错误是正确的。我发现了一些关于您可能想要查看的问题的文章。
- ASP Security error in IIS7
- Could not create a Disk Cache Sub-directory for the Application Pool (IIS7)
这两个网站引用本站:Template Persistent Cache initialization failed for Application Pool" on IIS 7 using Classic ASP
谢谢你。我启用了详细的错误并尝试了该脚本。我的页面保持空白...我尝试了'request(“param”);'只是看到它并显示'Microsoft VBScript编译错误'800a0401'预期的语句结束'。与此同时,我在你提供的链接之后解决了服务器错误。但仍然。 – Greg 2014-10-06 20:50:13
虽然我们正在取得进展!编译错误是分号。我的错误是第一行。请将其更改为'错误恢复下一个'此外,请确认IIS修复服务器错误后重新启动。 – lurker 2014-10-07 13:34:56
我的不好,我把脚本粘贴错了。两条指令都在同一行。它实际上全都是空白的页面结果。没有错误发生。丢掉我的头发...... – Greg 2014-10-07 13:39:30
传统的ASP应用程序池需要在经典的运行,而不是集成模式。如果新网站当前使用的是与网站1相同的应用程序池,则为该新网站创建一个新的应用程序池。
我慢慢搜索“请求表单在经典ASP停止工作”或类似的东西。
我很抱歉没有考虑过此事。至少我以前的回答在调试中是一个很好的教训。我希望你不会需要太多的Rograine来减少脱发。
它是真的吗?它似乎工作。但只有几个问题。该网站有aspx和asp页面。它会不会影响aspx页面?还有任何想法,为什么这个设置已经改变,以便asp页面被关闭? – Greg 2014-10-08 13:14:08
同样在prod服务器上,asp页面工作正常,应用程序池被设置为集成。有什么理由呢? – Greg 2014-10-08 13:25:09
好问题。我工作的网站使用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
你是否真的在新网站上启用了经典的asp?它在IIS7和更高版本上默认不启用? – John 2014-10-02 18:58:40
@John我的意思是一个新的网站已经制作并添加到服务器上。但在这里,我试图访问第一个网站上的asp页面,这已经在这里与功能asp页 – Greg 2014-10-02 19:03:45
只是为了阐明经典的ASP是启用和工作属性,你问题是,你想使用速记请求(“参数”) request.querystring(“”)或request.form(“”)??? – Frank 2014-10-02 19:08:24