33

我正在开发一个最大上传大小为 100MB 的 ASP.NET MVC3 Web 应用程序(不是我编写的)。现在这个 Web 应用程序被安装在客户的服务器机器上,所以如果这个值最大上传大小可以为每个客户配置,那就太好了。如果需要,他们有权编辑 Web 应用程序的 web.config。

现在 web.config 中有一个值,如下所示:

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

这里还有另一个值似乎相似:

<system.web>
    <httpRuntime maxRequestLength="104857600" executionTimeout="360" />
</system.web>

104857600 字节似乎是 100MB 文件上传限制。但是,在更改值时,我发现这不是权威值,也没有遵守新的限制。因此,经过更多挖掘后,我发现 C# 代码中的其他地方是一个硬编码值public const double MaxContentSize = 104857600,而另一种 C# 方法正在使用该值来接受/拒绝 Ajax 文件上传。

所以我想我想做的是替换代码中的硬编码数字,以便它从 web.config 中的值读取。然后,至少任何人都可以在部署网站时更改 web.config 中的该值。

你能做这样的事情吗?

MaxContentSize = ConfigurationManager.systemWeb.httpRuntime['maxRequestLength'];

我在 web.config 中看到了一些使用 appSettings 的示例,例如

<appSettings><add key="MySetting" value="104857600" /></appSettings>

然后像这样访问它:

ConfigurationManager.AppSettings["MySetting"]

但这意味着在其中添加一个自定义值,现在我们在 web.config 中有 3 个地方可以更改它。任何人都知道如何正确地做到这一点?

非常感谢

4

3 回答 3

44

您可以执行以下操作:

int maxRequestLength = 0;
HttpRuntimeSection section =
ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
if (section != null) 
    maxRequestLength = section.MaxRequestLength;
于 2013-01-10T01:24:10.150 回答
12

似乎没有简单的方法来阅读 system.webServer 部分,因为它在 machine.config 中被标记为“忽略”。

一种方法是直接解析 web.config 文件的 XML:

var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
var section = config.GetSection("system.webServer");
var xml = section.SectionInformation.GetRawXml();
var doc = XDocument.Parse(xml);
var element = doc.Root.Element("security").Element("requestFiltering").Element("requestLimits");
string value = element.Attribute("maxAllowedContentLength").Value;
于 2013-01-10T01:49:31.363 回答
7

尝试:

var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/")
var section = (System.Web.Configuration.SystemWebSectionGroup)config.GetSectionGroup("system.web")
var maxRequestLength = section.HttpRuntime.MaxRequestLength
于 2013-01-10T01:34:23.253 回答