Подтвердить что ты не робот

Как прочитать системное значение из web.config и использовать в ASP.NET MVC С# метод

Я работаю над веб-приложением 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. Кто-нибудь понял, как это сделать правильно?

Большое спасибо

4b9b3361

Ответ 1

Вы можете сделать что-то вроде:

int maxRequestLength = 0;
HttpRuntimeSection section =
ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
if (section != null) 
    maxRequestLength = section.MaxRequestLength;

Ответ 2

Кажется, нет простого способа прочитать раздел 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;

Ответ 3

Try:

var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/")
var section = (System.Web.Configuration.SystemWebSectionGroup)config.GetSectionGroup("system.web")
var maxRequestLength = section.HttpRuntime.MaxRequestLength