我正在将经典的asp应用程序(我知道,幸运的是)迁移到混合的asp.net/asp站点,似乎我无法访问Request.Form集合。就像测试一样,我这样做了:
for each x in Request.Form
Response.Write("<br>" & x & " = " & Request.Form(x))
next
我明白了:
请求对象错误'ASP 0101:80004005' 意外的错误 [我的剧本],第xx行 该函数返回|。
如果我将App Pool从Integrated Pipeline切换到Classic,则代码可以正常运行,但是在经典模式下运行不是.net应用程序的选项。我的未来有解决方法吗?
答案 0 :(得分:3)
在经典asp中访问Request.Form时出现意外错误是因为托管代码模块或处理程序触及了请求主体,之后本机代码无法使用它。
请参阅http://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770154
托管HTTP模块读取实体主体的某些部分。例如,模块读取Request.Form或Request.Params。这会导致POST请求的实体主体被读入托管内存。因此,实体主体不再可用于在IIS 7或IIS 7.5集成模式下运行的任何本机代码模块。
如果您控制托管模块,而不是让管道继续使用经典的asp处理程序,请使用带有额外http标头的Server.TransferRequest,您可以在下次执行模块时检查该标头。请参阅此回答https://stackoverflow.com/a/18078054/2837402
答案 1 :(得分:2)
这里唯一可以做的就是为你的asp经典页面创建另一个应用程序池,并为他们创建一个关于新应用程序池的新应用程序(也就是新的虚拟目录)。
由于你不能在asp和asp.net之间共享任何应用程序或会话范围,这应该不是问题。