多个Web.Config文件 - 从代码的角度来看

时间:2012-10-15 11:02:59

标签: asp.net orchardcms

ASP.NET允许站点结构中子级别的Web.Config文件。但是,我找不到任何讨论代码如何看待的文章。

在Orchard CMS中,整个商店都有配置文件。在一个只包含.CSS文件的文件夹中甚至还有一个配置文件!我是大型ASP.NET应用程序的新手,所以......

有人可以告诉我,我的假设是否正确。

  • 配置文件可能会影响服务器设置,从而影响服务器如何处理对站点结构下方资源的请求。

  • 从代码的角度来看,如果同一个类中的同一行代码在http://level1.resource请求期间查询配置文件,则它可以读取不同的值,以便在执行期间执行相同的代码请求http://level1/level2.resource(如果第2级有web.config)

    • 总体而言,它的工作方式基于当前的请求路径。

右?

2 个答案:

答案 0 :(得分:1)

您可以在子文件夹级别使用多个web.config文件。每个文件夹都包含自己的web.config。多个Web.config文件不能在同一级别使用。

以下是根文件夹web.config

的代码
<?xml version="1.0"?>
<configuration>
<system.web>
    <compilation debug="true" targetFramework="4.0" />
</system.web>
 <appSettings>
 <add key="root" value="This is from root web.config"></add>
 <add key="MySetting" value="This my settings is from root web.config"></add>
 </appSettings>
</configuration>

以下是子文件夹web.config的代码。

<?xml version="1.0"?>
<configuration>
<system.web>
</system.web>
<appSettings>
 <add key="sub" value="This is from sub web.config settings"></add>
 <add key="MySetting" value="This my settings is from sub folder web.config"></add>
</appSettings>
</configuration>

在C#中,您可以访问不同配置文件的settigns,如下所示。 System.Web.Configuration.WebConfigurationManager.AppSettings.Get( “根”); System.Web.Configuration.WebConfigurationManager.AppSettings.Get( “MySetting”)

答案 1 :(得分:0)

这是一个老问题,但我根据原始帖子在Orchard CMS环境中专门问自己同一个问题,并且我得到了Orchard特定答案。

在Orchard CMS的根目录中,有一个web.config,希望阻止所有用户请求单个静态文件。例如,您不希望人们从Theme文件夹下载placement.info或theme.txt。这是一个很好的“阻止一切,允许你需要的”方法。

<handlers accessPolicy="Script">
    <!-- Clear all handlers, prevents executing code file extensions or returning any file contents. -->
    <clear />
    <!-- Return 404 for all requests via a managed handler. The URL routing handler will substitute the MVC request handler when routes match. -->
    <add name="NotFound" path="*" verb="*" type="System.Web.HttpNotFoundHandler" preCondition="integratedMode" requireAccess="Script" />
    [...]
</handlers>

问题是,在诸如Scripts(包含静态js文件),样式(仅包含大量静态css文件)或内容(例如包含静态图像)等子文件夹中,您当然希望允许Web浏览器请求个人档案。因此,在这些子文件夹中,您有一个额外的web.config,如下所示:

<handlers accessPolicy="Script,Read">
    <!-- For any request to a file exists on disk, return it via native http module. AccessPolicy="Script" above is to allow for a managed 404 page. -->
    <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />
</handlers>
PS:我正在玩Themes,出于某种原因,我必须在所有这些子web.config中的每个<remove name="StaticFile"/>之前添加<add name="StaticFile"...>