ASP.NET - 确定运行时的最大文件上传大小

ASP.NET - Determine max file upload size at runtime

我的网站上有几个地方有帮助文本,告诉用户允许的最大文件上传大小是多少。我希望能够让它成为动态的,这样如果我更改 web.config 文件中的请求限制,我就不必在很多地方更改表单说明。这可能使用 ConfigurationManager 或其他东西吗?

由于您没有提供任何进一步的详细信息:正如所指出的 here,您有 2 个选项来为整个应用程序设置大小限制。

这取决于您需要稍微不同地处理这个问题:

如果您使用 <httpRuntime maxRequestLength="" />,您可以通过 WebConfigurationManager

获取信息
//The null in OpenWebConfiguration(null) specifies that the standard web.config should be opened
System.Configuration.Configuration root = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null);
var httpRuntime = root.GetSection("system.web/httpRuntime") as System.Web.Configuration.HttpRuntimeSection;
int maxRequestLength = httpRuntime.MaxRequestLength;

在 Priciple 中,您应该可以对 <requestLimits maxAllowedContentLength="" /> 执行相同的操作。但是 WebConfigurationManager 中的 system.webServer-Section 被声明为 IgnoreSection 并且无法访问。可以在 application.config 或类似的 IIS 中更改此行为。但是因为(在我的例子中)甚至 .SectionInformation.GetRawXml() 都失败了,我倾向于宣布这是一个失败的案例。

我在这种情况下的解决方案是手动访问 Web.config-文件:

var webConfigFilePath = String.Format(@"{0}Web.config", HostingEnvironment.MapPath("~"));
XDocument xml = XDocument.Load(System.IO.File.OpenRead(webConfigFilePath));
string maxAllowedContentLength = xml.Root
    .Elements("system.webServer").First()
    .Elements("security").First()
    .Elements("requestFiltering").First()
    .Elements("requestLimits").First()
    .Attributes("maxAllowedContentLength").First().Value;

@Roman 提出了另一个解决方案here using Microsoft.Web.Administration.ServerManager for which you need the Microsoft.Web.Administration Package