Ответ 1
Вы можете сделать что-то вроде:
int maxRequestLength = 0;
HttpRuntimeSection section =
ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
if (section != null)
maxRequestLength = section.MaxRequestLength;
Я работаю над веб-приложением ASP.NET MVC3 (не написанное мной), которое имеет максимальный размер загрузки 100 МБ. Теперь это веб-приложение устанавливается на серверные машины для клиентов, поэтому было бы неплохо, если бы этот максимальный размер загрузки был настроен для каждого клиента. У них есть доступ к редактированию web.config для веб-приложения, если это необходимо.
Теперь в файле web.config есть значение:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600" />
</requestFiltering>
</security>
</system.webServer>
Также здесь есть другое значение, которое выглядит похоже:
<system.web>
<httpRuntime maxRequestLength="104857600" executionTimeout="360" />
</system.web>
То, что 1024857600 байтов является пределом загрузки файлов в 100 Мбайт. Однако при изменении значения я обнаружил, что это не авторитетная ценность, и она не подчиняется новому пределу. Поэтому после некоторого дополнительного копания, которое я нашел где-то еще в коде С#, было твердое значение public const double MaxContentSize = 104857600
, а другой метод С# использовал это значение для принятия/отказа в загрузке файла Ajax.
Так что я думаю, что я хотел бы сделать, это заменить этот код в коде, чтобы он читал значение в файле web.config. Тогда, по крайней мере, любой может изменить это значение в web.config при развертывании веб-сайта.
Можете ли вы сделать что-то подобное?
MaxContentSize = ConfigurationManager.systemWeb.httpRuntime['maxRequestLength'];
Я видел несколько примеров, используя appSettings в файле web.config.
<appSettings><add key="MySetting" value="104857600" /></appSettings>
затем обращаясь к нему так:
ConfigurationManager.AppSettings["MySetting"]
Но это означало бы добавление в него настраиваемого значения, и теперь у нас было бы 3 места, чтобы изменить его в файле web.config. Кто-нибудь понял, как это сделать правильно?
Большое спасибо
Вы можете сделать что-то вроде:
int maxRequestLength = 0;
HttpRuntimeSection section =
ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
if (section != null)
maxRequestLength = section.MaxRequestLength;
Кажется, нет простого способа прочитать раздел system.webServer, потому что он помечен как "проигнорированный" из machine.config.
Один из способов заключается в том, чтобы напрямую проанализировать XML файл web.config:
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;
Try:
var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/")
var section = (System.Web.Configuration.SystemWebSectionGroup)config.GetSectionGroup("system.web")
var maxRequestLength = section.HttpRuntime.MaxRequestLength