我正在与此争斗好几天,我有一个ASPX页面,它有一个文件上传控件和一个上传按钮,无论我做什么,我都无法让页面接受自动POST请求。< / p>
请求正文如下(所有新行CRLF),所有UTF8 == ANSII(现在没有规范字符)
-----------------------------8cdc74445fc88d0
Content-Disposition: form-data; name="btnUpload"
Upload
-----------------------------8cdc74445fc88d0
Content-Disposition: form-data; name="ctrFileUpload"; filename="myfile.txt"
Content-Type: text/plain
This is a test!
-----------------------------8cdc74445fc88d0--
表单有多个按钮,所以我需要填写文件上传,然后按上传按钮。但这似乎不起作用。
同一页面在Web浏览器中运行良好,但在这种情况下,视图状态垃圾是其中一个部分。我尝试了EnableViewState =“false”,ValidateRequest =“false”,EnableSessionState =“ReadOnly”,但是当我使用浏览器时垃圾部分仍然存在。
我错过了什么吗?尝试研究RFC和一切,但似乎没有任何工作。
答案 0 :(得分:3)
为什么不使用fiddler将您的帖子与有效的帖子进行比较..
答案 1 :(得分:1)
POST请求是发布请求 - 对于浏览器和其他应用程序是相同的。在创建请求时,您需要完成post的所有操作都设置为http动词(方法)。如果您从应用程序使用.net作为请求生成器,可以通过设置HttpWebRequest.Method Property来完成。那里也有例子
Aaaaargh,现在一切都很清楚了。 http中没有'事件'。 Asp.net webforms介绍了这个(以及许多其他方法)方法,使得在Web上进行开发更容易,因为我相信那些因为http无状态而难以在Web上编程或者受到Windows开发限制的人。 Asp.net webforms使Web开发更像Windows开发。正如我所提到的 - http协议中没有事件。因此,asp.net使用viewstate garbage及其dopostbackwithoptions函数将http客户端点击绑定到服务器端事件。这就是为什么你的自动发布不起作用的原因 - 当缺少viewstate垃圾时,webforms引擎没有机会绑定到事件。您应该处理Web请求 - 而不依赖于事件答案 2 :(得分:1)
除非有必要的内容,否则您实际上不需要视图状态才能使表单正常工作。您需要的是确保点击提交表单的按钮名称包含在您提交的数据中。
需要点击的控件,以便asp.net可以找出引发click事件的控件。 viewstate只是每个控件的键值对的列表,它们与默认值不同。通过将这些值与提交的值进行比较,它可以引发更改事件等。
答案 3 :(得分:0)
我也不知道“自动发布请求”是什么,而是设置
<form ... enctype="multipart/form-data">
您的表单标签上的可能会有所帮助。