我在 .NET 3.5 中构建了一个自定义 404 CMS 系统,虽然发布数据在 IIS 5.1 和 6.0 中本地工作,但它在生产 IIS 6.0 服务器上不起作用。我逐项比较了 IIS 6.0 站点设置,它们几乎相同,唯一的区别无关紧要。
我验证了表单在每种情况下都发布到“ http://domain/folder/folder/page.resource ”(代码在SVN中)并且提交时没有发生重定向(我抛出异常以确保) . 服务器的一些调试信息:
IIS 5.1 (my computer, works):
ServerVariables["REQUEST_METHOD"]="POST"
Request.TotalBytes = 1600
Request.QueryString.Count = 1 (NOTE: contains "404;http://domain:80/folder/folder/page.resource" in each case)
Request.Form.Count = 109
IIS 6.0 (test server, works):
ServerVariables["REQUEST_METHOD"]="GET" (NOTE: IIS 6.0 reads this as "GET" instead of "POST")
Request.TotalBytes = 1600
Request.QueryString.Count = 1
Request.Form.Count = 109
IIS 6.0 (production server, does not work):
ServerVariables["REQUEST_METHOD"]="GET"
Request.TotalBytes = 0 (NOTE: should be ~1600)
Request.QueryString.Count = 1
Request.Form.Count = 0 (NOTE: should be 109)
有没有人有任何想法?我已经阅读过 POST 数据未在 IIS 7.0 中提交的 404 页,但在 6.0 中没有。我的表格是这种格式:
<form id="GolfRegistration" name="GolfRegistration" method="POST" action="/folder/folder/page.resource" onSubmit="return CalculateAmount();">
<input type="button" value="Submit" onClick="if(ValidateInput()){submit(GolfRegistration);}">
</form>
仅对于 IIS 5.1,我在“IIS > 网站 > 属性 > 主目录选项卡 > 配置按钮 > 添加”中设置了 .resource 扩展名以使用 GET、HEAD 和 POST。这可以防止我在提交时收到 405 错误。
编辑:我将 POST 更改为 GET,并且在所有 3 种情况下它都正确提交了数据,所以这不是表单问题。不幸的是,我无法在查询字符串中传递变量(有 109 个)。