在预编译 (Pre-Compiled) 的ASP.NET应用中页面设置失效的问题
我的客户有一个验证视图(viewstate)MAC失败的问题。作为应急措施,他想在找出最终的解决方案之前,禁用视图MAC验证。然而当他在配置文件中添加了如下的设置后,还是有问题。
<pages validateRequest="false" enableEventValidation="false" enableViewStateMac="false" viewStateEncryptionMode="Never">
客户的应用是一个预编译 (Pre_compiled) 的ASP.NET应用,且可更新(updateable)的选项被禁用。看了由编译器通过上述设置生成的代码后,我们发现这些设置是硬编码。所以这意味着仅仅简单地在web.config里添加上述设置,并不会影响预编译的应用。为了使其生效,必须重新编译整个应用。
[DebuggerNonUserCode]
private void __BuildControlTree(default_aspx __ctrl)
{
__ctrl.EnableViewStateMac = false;
__ctrl.EnableEventValidation = false;
__ctrl.ViewStateEncryptionMode = ViewStateEncryptionMode.Never;
这是一个By-Design的行为。
ASP.NET预编译概述如下:
https://msdn.microsoft.com/en-us/library/bb398860.aspx
Wei Zhao from AGPC DSI Team