18

考虑:

Content-Disposition: form-data; name="__VIEWSTATE"

/wEPDwUKMTQxNzIxMTc0MQ9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRkflsROmXoLo8ar8ukWWYDh1Wr2BCwmhiAAqpX/xwqLq8=

Content-Disposition: form-data; name="__EVENTVALIDATION"

/wEWBgKJ1KD6AwKH3P+GBQLr/4HeAgKWoZqyCQLinqurDALt3oXMA0YLgb/Mt6KGihl+8ixYoY9A24wgHGGoPAINhuyP7nEl

我们制作了一个用户可以上传照片的网站。后来我们决定用户也可以通过其他应用上传照片,我们希望有一个统一的界面。所以其他应用程序使用相同的页面。

我们注意到,除非我们知道 __EVENTVALIDATION 和 __VIEWSTATE 的值,否则我们无法上传照片。

当然,应用程序可以只加载上传的图像,但这有点麻烦。

那些到底是为了什么?有没有办法在不指定内容的情况下将图像上传到 aspx 上传网站?

4

1 回答 1

25

HTTP是一种无状态协议,这意味着客户端和服务器没有内置的方式来跟踪应用程序从一个请求到下一个请求的状态。已经发明了各种技术来规避这种情况,例如 cookie。ViewState 和事件验证是ASP.NET使用的两种技术,用于为网页提供完整状态的感觉。

ViewState 中的数据是所有控件(输入字段、复选框等)向下发送到客户端时的状态。当表单被发送回服务器时,ASP.NET 可以判断用户是否更改了任何字段中的任何值,并且可以引发反映这一点的事件(CheckedChanged例如在复选框上)。如果没有 ViewState,服务器将无法判断是否有任何字段已更改。

事件验证确保客户端上引发的事件源自 ASP.NET 呈现的控件。

这是一篇关于 ViewState 的论文另一篇涵盖事件验证的论文。

于 2013-01-28T08:22:36.533 回答