【问题标题】:Is This really an ASP.NET Web Forms Bug?这真的是一个 ASP.NET Web 窗体错误吗?
【发布时间】:2010-01-19 16:38:51
【问题描述】:

我有一个由一组负载平衡服务器托管的 Web 应用程序。 我在母版页上有一个 ASP.NET 文本框和按钮,用于获取值并在数据库中搜索它。 搜索结果显示在名为 search.aspx 的页面上,该页面接受一个查询字符串,该字符串的值是在母版页上的文本框中输入的值。

母版页上的按钮只是 Respose.Redirect 到带有提到的查询字符串的 search.aspx 页面。

有时搜索是和平执行的,有时会抛出以下异常:

视图状态 MAC 验证失败。如果 此应用程序由 Web 托管 场或集群,确保 配置指定 相同的validationKey和validation 算法。无法使用自动生成 在一个集群中。

我无法让所有服务器上的机器密钥都相同,因为它们托管其他站点。 我认为这是因为一组负载平衡的服务器。 我试过 EnableViewStateMac="false", ValidateRequest="false", EnableEventValidation="false" 但没有区别。

我尝试了以下解决方案:

  • 设置按钮的 PostBackUrl search.aspx 的母版页 页面并删除 Response.Redirect in 的 Click 事件处理程序 按钮。
  • 读取值 Request.Form["SearchCriteriaTextBox"] 在 search.aspx 页面的加载中。

但实际上我发现当页面不继承母版页时它可以工作,而这不是我的情况。 那怎么办??????

感谢您的帮助。

【问题讨论】:

    标签: .net asp.net


    【解决方案1】:

    看这里:Validation of viewstate MAC failed

    似乎您需要在所有服务器上的 web.config 中拥有相同的验证密钥。要获取新的机器密钥,您可以使用Pete's Nifty Machine Key Generator

    【讨论】:

      【解决方案2】:

      您可以在 web.config 中覆盖机器密钥:

      <machineKey validation="SHA1"
          validationKey="ABC123..."
          decryption="Auto"
          decryptionKey="DEF567..." />
      

      如果您在每个框上都这样做,它只会影响您的网站,并且会防止出现此错误。

      【讨论】:

        【解决方案3】:

        您可以在应用的 web.config 文件中设置机器密钥,这样就不会影响服务器上的其他站点。
        http://msdn.microsoft.com/en-us/library/ms998288.aspx#paght000007_webfarmdeploymentconsiderations

        【讨论】:

          【解决方案4】:

          这不是错误,这是设计使然。

          ViewState 和其他加密项目使用验证密钥和算法来获取密码文本。在 webfarm 中,所有机器上的这些值必须相同才能匹配。

          您可以在 web.config 中覆盖此设置:

          <machineKey validation="SHA1"
            validationKey="ABC123..."
            decryption="Auto"
            decryptionKey="DEF567..." /> 
          

          这应该在作为 webfarm 一部分的每个站点上完成。

          按照建议,您可以使用Pete's Nifty Machine Key Generator 生成此设置。

          【讨论】:

            猜你喜欢
            • 2017-02-17
            • 2012-09-18
            • 2012-03-25
            • 2010-12-22
            • 1970-01-01
            • 2023-03-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多