.Net4.0 Web.config 配置实践

简介: .Net4.0 Web.config 配置实践

关于 Web.config

当通过.NET 新建一个Web应用程序项目后,默认情况下会在根目录自动创建一个默认的Web.config文件,其是一个XML文本文件,内容包括运行应用默认的所有运行基础配置。

除根目录外,可以每个要特殊配置的子目录下新建一个Web.config文件。它可以在继承父目录的配置信息以外,可以自定义重写或修改父目录中定义的设置。

在应用运行时对 Web.config 文件的修改不需要重启服务就可以生效,因此请注意正确的修改内容,否则会引起应用站点异常并报错。

Web.config 文件可以自定义配置进行扩展,通过自定义配置参数,满足我们日常对应用程序的其它配置需求。

运行环境

操作系统: Windows Server 2019 DataCenter

.net版本: .netFramework4.0 或以上

编辑工具:VS2019 或其它任何文本编辑器

配置实践

请求验证模式兼容旧版本

请求验证模式定义了如何处理客户端请求中的输入内容的安全性,我们运行的是 .netFrameword 4.7.1 版本,为保证兼容性,最好配置

<system.web>
 <httpRuntime  requestValidationMode="3.5"  />
</system.web>

上传文件限制

这是经常用到和遇到的一个问题,对于默认配置 maxRequestLength 一般仅允许上传不超过4Mb的文件,我们可以通过修改下列配置节:

<system.web>
 
    <httpRuntime  maxRequestLength="20480000"  />
 
</system.web>

我们还可以配置些节点:

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483647" />
      </requestFiltering>
    </security>
</system.webServer>

如果不起作用还可以配置如下节(如果存在):

<aspnetUploadSettings>
    <add key="maxRequestLength" value="20480000" />
</aspnetUploadSettings>

Request.Path危险值配置

在页面处理输入时,我们会遇到客户端(&)中检测到有潜在危险的 Request.Path 值错误 (即包含一些被认为是危险的字符输入,如脚本标记等),如果我们有需要关闭此功能时,可以在应用页面头部加入如下配置:

<%@ Page Language="C#"  ValidateRequest="FALSE"  %>

Web.config 文件里我们可以配置如下:

<system.web>
    <httpRuntime requestPathInvalidCharacters="" />
</system.web>

全站应用UTF-8编码

目前utf-8编码是广泛应用的一种编码,我们可以默认配置如下节:

<system.web>
    <globalization requestEncoding=”utf-8″ responseEncoding=”utf-8″ fileEncoding="utf-8" />
</system.web>

也可以单独为某页面配置编码,如下示例:

<location path="cc/test.aspx">
    <system.web>
      <globalization requestEncoding="gb2312" responseEncoding="gb2312"  fileEncoding="gb2312"/>
    </system.web>
</location>

设置日期格式

某些情况我们需要对日期格式进行符合自己应用的标准化格式输出,如 2024-04-22的日期格式,我们会发现从数据库提取的日期格式未必如预期那样,即使配置了数据库格式及WINDOWS环境日期格式,仍然不能按照预期显示,那么我们可以尝试在 Web.config <appSettings>配置节添加如下key:

<appSettings>
    <add key="ShortDatePattern" value="yyyy-MM-dd" />
</appSetttings>

请注意 yyyy-MM-dd 是区分大小写的。更多配置可以参考如下链接:

https://learn.microsoft.com/zh-cn/previous-versions/bb688124(v=msdn.10)?redirectedfrom=MSDN

我们发现有时配置了此节会有失效的情况,可以打开 Web.config 文件,随便改动一下,再保存一下理论上就能恢复正常的日期显示了。

每个会话的限制并发请求数

这是为了解决 .NET Framework 4.74.7.14.7.2 中引入的应用兼容性问题,可以在 Web.config <appSettings>配置节添加如下key:

<appSettings>
    <add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSetttings>

更多详情请参考如下链接:

有关迁移到 .NET Framework 4.7.x 的操作的重定向目标更改

正常运行指定扩展名的文件

在我们运行的一些应用中,需要运行 mp4 文件,发现运行时出现错误,我们可以加入对该扩展名的支持,如下配置:

<system.webServer>
   <staticContent>
      <remove fileExtension=".mp4" />
      <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
   </staticContent>
</system.webServer>

请注意 remove 节,是一种比较稳妥和兼容的写法,否则可能未必能够达到您的预期。

Json字符串超出最大长度限制

在处理Json字符串序列化的时候,可能会遇到字符串超过长度限制的错误,我们可以配置如下节:

<system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="204800"/>
      </webServices>
    </scripting>
</system.web.extensions>

控件早期版本的呈现方式

指定控件应以 ASP.NET 的早期版本中的呈现方式,可以设置为3.5(最低版本),如下配置:

<system.web>
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
      <controls>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </controls>
    </pages>
</system.web>

这是Pages的通用设置方法,更多信息请参考如下链接:

https://learn.microsoft.com/zh-cn/previous-versions/950xf363(v=vs.110)?redirectedfrom=MSDN

C# 操作 Web.config

appSettings节是我们经常自定义变量配置的节,在此我们分享 C# 一个appSettingsEdit方法,可以动态的配置指定的变量及值,其参数见下表:

序号 参数名 类型 说明
1 WebConfigDirectory string Web.config文件所在的目录(不包含文件名)
2 appSettingsAddkey string 要在 appSettings 节中添加的键值 Key 名称
3 keyvalue string 要在 appSettings 节中添加的键值 Key 的值 Value

方法代码如下:

 

public bool appSettingsEdit(string WebConfigDirectory,string appSettingsAddkey,string keyvalue) 
    { 
            
      try 
      { 
        string path=WebConfigDirectory+"\\web.config"; 
        XmlDocument xd=new XmlDocument(); 
        xd.Load(path); 
 
        //如果没有appSetting,则添加 
        if(xd.SelectNodes("//appSettings").Count==0) 
        { 
          xd.DocumentElement.AppendChild(xd.CreateElement("appSettings")); 
        } 
 
        //判断节点是否存在,如果存在则修改当前节点 
        bool addNode=true; 
        foreach(XmlNode xn1 in xd.SelectNodes("/configuration/appSettings/add")) 
        { 
          if(xn1.Attributes["key"].Value==appSettingsAddkey) 
          { 
            addNode=false; 
            xn1.Attributes["value"].Value=keyvalue; 
            // xn1.ParentNode.RemoveChild(xn1); 
            break; 
          } 
        } 
 
        //当前节点不存在,则添加新节点 
        if(addNode) 
        { 
          //创建新节点 
          XmlNode xn2=xd.CreateElement("add"); 
 
          //添加key 
          XmlAttribute xa=xd.CreateAttribute("key"); 
          xa.Value=appSettingsAddkey; 
          xn2.Attributes.Append(xa); 
 
          //添加value 
          xa=xd.CreateAttribute("value"); 
          xa.Value=keyvalue; 
          xn2.Attributes.Append(xa); 
          xd.SelectSingleNode("/configuration/appSettings").AppendChild(xn2); 
        } 
        //保存web.config 
        xd.Save(path); 
        return true; 
      } 
      catch 
      { 
        return false; 
      } 
} 

小结

一般情况下请勿更改 Web.config 的文件名及扩展名,因为 .config 文件扩展名可防止 ASP.NET 下载相应文件。

更高级的父对象继承可以更改 %SystemRoot%\Microsoft.NET\Framework\<版本>\CONFIG 目录下的 Machine.config 和 Web.config 文件继承所有基础配置设置,此文件属于服务器配置级别,要高于单独的应用程序级别。

到此关于 Web.config 的配置我们就讲到这里,后续随着实际的应用我们会继续丰富本文章内容,感谢您的阅读,希望本文对您能有所帮助。

相关文章
|
5月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
481 4
|
10月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
5月前
|
开发框架 .NET C#
ASP.NET Core Blazor 路由配置和导航
大家好,我是码农刚子。本文系统介绍Blazor单页应用的路由机制,涵盖基础配置、路由参数、编程式导航及高级功能。通过@page指令定义路由,支持参数约束、可选参数与通配符捕获,结合NavigationManager实现页面跳转与参数传递,并演示用户管理、产品展示等典型场景,全面掌握Blazor路由从入门到实战的完整方案。
489 6
|
8月前
|
存储 Linux Apache
在CentOS上配置SVN至Web目录的自动同步
通过上述配置,每次当SVN仓库中提交新的更改时,`post-commit`钩子将被触发,SVN仓库的内容会自动同步到指定的Web目录,从而实现代码的连续部署。
237 16
|
9月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
9月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
11月前
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
539 35
|
9月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。该方案设计目标是实现通用性,适用于各种网络架构和业务场景。
284 1
|
10月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。
377 7
|
9月前
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
325 0