【问题标题】:Should a page with ViewState disabled still be validating a __viewstate field?禁用 ViewState 的页面是否仍应验证 __viewstate 字段?
【发布时间】:2010-09-24 14:56:50
【问题描述】:

我有一个购物车页面 (Cart.aspx),其中有一个按钮,如果需要付款,该按钮将(有时)发布到第三方支付网关。支付网关将处理付款,然后在我的网站 (Order.aspx) 上进行静默发布,以便我可以更新订单状态。

Order.aspx 总是抛出无效的视图状态错误,即使页面上禁用了视图状态。

发生的情况是 Cart.aspx(已启用视图状态)发布到支付网关,网关会将其作为静默发布的一部分发回。即使 Order.aspx 禁用了 viewstate 并禁用了验证,它仍然会尝试验证它所提供的 __viewstate 字段。

我知道设置EnableViewState=false 将禁用 __viewstate 字段的呈现,但如果另一个页面提供该字段,它不应该仍然跳过验证吗?

我尝试在 Order.aspx 的 Page_Init 事件上调用 ViewState.Clear(),但 ViewState 显然是空的。

关于如何解决这个问题的任何建议?我不想禁用 Cart.aspx 上的 ViewState(在某些情况下可能需要),但我不知道如何在 Order.aspx 上清除它。

【问题讨论】:

    标签: c# asp.net viewstate


    【解决方案1】:

    即使禁用 ViewState,ASP.NET 仍然需要它。它使用隐藏的 __viewstate 字段来表示视图状态、控制状态并用于验证请求。您可以创建一个自定义 HttpHandler 并将订单发布到该页面。当然,您需要对请求的有效性保持谨慎。确保您可以确保请求是合法的,而不是来自黑客。

    【讨论】:

    • 更糟糕的是——即使隐藏字段丢失或为空,并且页面显然不需要它,验证代码仍然会运行!
    猜你喜欢
    • 2012-09-24
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2011-04-16
    • 2015-12-18
    • 2019-06-28
    相关资源
    最近更新 更多