gpt4 book ai didi

c# - 将数据从 ASP.Net 4.5 发布到 ASP.Net 2.0 Web 应用程序时出错

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:41 26 4
gpt4 key购买 nike

我们遇到了以下情况:

  • 我们有一个在 .Net 2.0 框架上运行的网络应用程序。
  • 客户有一个在 .Net 4.5 框架上运行的网络应用程序。

当他们将数据从他们的一个页面发布到我们的页面时,我们遇到了系统错误。为了验证这个问题,我在同一台服务器上部署了两个 Web 应用程序,并尝试将表单从 webapp 1(在 4.5 上)发布到 webapp 2(在 2.0 上)。我遇到了以下错误。

[ViewStateException: Invalid viewstate. 
Client IP: 127.0.0.1
Port: 63153
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
ViewState: /wEPDwUKLTM1MTA1NjA1MmRk6CPd6yG4r8HEbqBZi3i4jiLLnZotIlX7+6zAZaceaGY=
Referer: http://localhost/test4/default.aspx
Path: /test2/default.aspx]

[HttpException (0x80004005): Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.]
System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +148
System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +11065601
System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) +59
System.Web.UI.HiddenFieldPageStatePersister.Load() +11065704
System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +11150648
System.Web.UI.Page.LoadAllState() +46
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +11146167
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +11145706
System.Web.UI.Page.ProcessRequest() +91
System.Web.UI.Page.ProcessRequest(HttpContext context) +240
ASP.default_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\test2\b4717a74\d7ba8639\App_Web_ha1suqrp.0.cs:0
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +599
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171

我尝试了以下方法:

  • 页面标记中的 EnableViewState = false。但 .Net 仍在添加一个_VIEWSTATE 隐藏变量。

  • 添加了一个 Javascript 函数来将 _VIEWSTATE 隐藏变量设置为空的。这解决了问题。

虽然第二个工作解决方案解决了问题,但我正在寻找更好的方法来解决此类问题。

最佳答案

EnableViewState = false仅关闭 ViewState,但不关闭 ASP.NET 服务器控件的控件状态,这就是您仍然拥有隐藏的 VIEWSTATE 控件的原因。

ViewState 在服务器上进行了哈希编码,因此您应该使用相同的 key 来生成哈希。您设置了 <machinekey>在您的 machine.config 文件中为两个应用程序/服务器上的相同值。默认值为 AutoGenerate ,这意味着每个服务器都有自己的机器 key 。你找更多资料here

作为替代方案,您可以通过设置 EnableViewstateMac 来关闭散列。为假(基本上是你的错误信息所说的)。通过这样做,用户可以操纵您的 ViewState。

关于c# - 将数据从 ASP.Net 4.5 发布到 ASP.Net 2.0 Web 应用程序时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19938433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com