`
cheeruplc
  • 浏览: 116337 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

ASP.NET Post页面及验证视图状态MAC失败问题的正确解决办法(转)

阅读更多
本文转自http://www.cnblogs.com/sephil/archive/2007/10/19/asp_net_post.html

今天做了个首页登陆的页面,是用Request.Form接收参数的
然后又做了个测试页面test.aspx,代码如下:
<body>
    <form id="form1" runat="server" method="post" action="Default.aspx">
    <div>
        <input type="text" runat="server" id="Solution" value="(Local)" />
        <input type="text" runat="server" id="UserName" value="ricky" />
        <input type="text" runat="server" id="Password" value="111" />
        <input type="submit" runat="server" />
    </div>
    </form>
</body>

但是测试的时候发现test页面始终post到他自己
去掉runat标记则可以post到default.aspx,但取不到值
后来在IE里面查看源代码,发现html是这个样子的<form id="form1" method="post" action="test.aspx">
也就是说生成的html里始终是post到自己的
知道问题就好办了
修改代码:
<form id="form1" runat="server" method="post" onsubmit="this.action='Default.aspx'">

一切OK,post到default.aspx了
然后又报错了
验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate
去网上搜了搜,说问题的原因是asp.net的runat='server' 会对ViewStat进行MAC的加密,解决办法基本上就2个:
1:修改当前页面的@page属性,添加enableEventValidation="false" viewStateEncryptionMode="Never"
或者在web.config里添加<pages enableEventValidation="false" viewStateEncryptionMode="Never" />
2:在web.config里指定validationKey和验证算法
<machineKey validation="3DES" validationKey="319B474B1D2B7A87C996B280450BB36506A95AEDF9B51211" decryption="3DES" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A87" />
可是实际试下来发现没用,问题依旧
查了查资料加上实际测试,终于发现了正确的解决办法
修改当前页面的@page属性,添加enableEventValidation="false" enableViewStateMac="false"
或者在web.config里添加<pages enableEventValidation="false" enableViewStateMac="false" />
分享到:
评论

相关推荐

    经典后台程序好用asp.net

    - 状态管理:ASP.NET提供了多种状态管理方式,如视图状态、控制状态、session状态和cookie,保证了页面间数据的一致性。 - 安全性:内置的安全特性,如身份验证、授权和加密,确保了应用的安全性。 - 部署方便:...

    ASP.NET四种页面导航方式之比较与选择

    此外,由于视图状态(ViewState)的验证问题,使用Server.Transfer时,目标页面可能需要禁用ViewState的MAC检查,这可能带来安全风险。 四、Server.Execute Server.Execute方法与Server.Transfer类似,都是在服务器...

    ASP.Net中表单POST到其他页面的方法分享

    但在ASP.Net中,出于安全考虑,服务端表单默认是提交到当前页面的,这可能导致在尝试将表单POST到其他页面时遇到问题,尤其是当涉及到视图状态验证(ViewStateValidation)时。 视图验证错误通常是由于ASP.Net的...

    AspNet服务器程序

    8. **身份验证和授权**:ASP.NET 2.2提供了强大的身份验证和授权功能,包括Cookie认证、JWT令牌、OAuth2等,确保应用程序的安全性。 9. **性能优化**:2.2版本在性能方面进行了优化,如更快的启动时间和内存使用...

    AspNetAndSircl-03-MoreForms.zip

    ASP.NET Core是一个高性能、开源的Web应用框架,适用于Windows、Linux和Mac平台。而Sircl(Simple Is Really Cool Library)是一个轻量级的库,它为ASP.NET Core提供了更灵活的前端交互能力。 首先,让我们关注`...

    blazingChatUbuntu:blazor webassembly应用

    BlazingChatUbuntu可能利用ASP.NET Core的身份验证服务和中间件,提供登录、注册、会话管理和权限控制功能。这可能包括OAuth、OpenID Connect或者JWT(JSON Web Tokens)等认证机制。 7. **数据库集成** 应用的...

Global site tag (gtag.js) - Google Analytics