<system.web> <compilation debug="true"></compilation> <customErrors mode="Off"></customErrors> <authentication mode="Forms"> <forms name="Cftea" path="/" defaultUrl="Default.aspx"></forms> </authentication> <httpRuntime maxRequestLength="200000" requestValidationMode="2.0" executionTimeout="600" enableVersionHeader="false"/> <pages validateRequest="false"></pages> </system.web> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="200000000" /> </requestFiltering> </security> </system.webServer>
以上是一个 web.config 的 system.web 配置节中,我个人觉得需要修改的节,列出来便于部署的时候根据需要调整。
compilation 如果属性 debug="true" 表示打开调试,这将会输出更详细的错误信息,但性能也会略有小小的影响。根据需要决定是否开启。(一般部署成功后不开启)
customErrors 如何显示错误信息,如果 mode 是 Off 表示输出详细错误信息(不输出管理员配置的错误页),如果是 On 表示关闭详细错误信息(输出管理员配置的错误页),如果是 RemoteOnly 表示只有服务器显示详细错误信息(向客户端输出管理员配置的错误页,如果是本机查看,则输出详细错误信息)。
authentication 一般不是做 Windows 验证,所以一般需要 mode="Forms"。其子节点的配置也很重要,请参见:ASP.NET Membership 开发-同一域名不同应用程序冲突的情况。
httpRuntime 的 maxRequestLength 表示最大能提交多少 KB 的数据,在做文件上传时特别要注意设置,注意单位是 KB。在 .NET 3.5 SP1 中,这个值最大为:2097151,而在 .NET 4.6.2 中我设置为:100000000 也没报错。executionTimeout 为页面执行超时,单位秒。enableVersionHeader="false" 表示去掉输出标头“X-AspNet-Version:xxx”,这个去掉没有任何意义,只是那些搞安全测评的公司认为这不安全,非要喊删掉,其实哪里不安全嘛,照他这么说全世界所有的摄像头都不要打 Logo,因为一打 Logo 别人就知道你是什么品牌了,用的什么技术了,就更好攻击了,这太过了,但是为了不跟他们计较,就加上吧。
pages 的 validateRequest 是我最气愤的,一些做网站的懂都不懂,自己编程有漏洞怪微软,搞得微软默认状态下是禁止提交带 <、> 标签的文本,郁闷死,如果你是做内容管理系统,这个是必设置 validateRequest="false",因为提交的文章内容一般是超文本内容,这是含有 HTML 标签的,要允许提交 HTML 标签。如果是 .NET Framework 4.0 及以上版本,光设置这个还不够,还要在 httpRuntime 节中设置:requestValidationMode="2.0"。
maxAllowedContentLength 这个是指最大上传文件长度,单位为字节(真不统一啊,一会儿这个单位,一会儿那个单位),这个玩意儿,应该是后头冒出来的,以前好像没有,这个表示允许的文件大小,而 maxRequestLength 是整个请求的大小。
据说要让 maxAllowedContentLength 生效,还需要在 C:\Windows\System32\inetsrv\config\applicationhost.config 中配置如下:
将 overrideModeDefault 改为 Allow,我没改也生效了,奇怪。