4

For my web app i have flash component for uploading files. I would like to handle max file size limit on client side without actual sending that file to server. So i need to read that value from config file somehow to send it to client. Some articles i had found said that reading directly config file is not solution, because it can be changed in whole lot of places. So there should be some API call probably, but i cannot find any...

<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="1048576" />
        </requestFiltering>
    </security>
</system.webServer>
FredyC
  • 3,999
  • 4
  • 30
  • 38

3 Answers3

7

I know it is an old question, but it cost me so much time (wasted) that I felt like posting a working solution for those who might come in my path:

Using Microsoft.Web.Administration;

uint uiMaxAllowedContentLength = 0;
using (ServerManager serverManager = new ServerManager())
{
    Configuration config = serverManager.GetWebConfiguration("Default Web Site/{{your special site}}");
    ConfigurationSection requestFilteringSection = config.GetSection("system.webServer/security/requestFiltering");
    ConfigurationElement requestLimitsElement = requestFilteringSection.GetChildElement("requestLimits");
    object maxAllowedContentLength = requestLimitsElement.GetAttributeValue("maxAllowedContentLength");
    if (null != maxAllowedContentLength)
    {
        uint.TryParse(maxAllowedContentLength.ToString(), out uiMaxAllowedContentLength);
    }

}

Make sure that you first download and install the Microsoft Web Administration package (

PM> Install-package Microsoft.Web.Administration

)

Also, you might need to adjust permission to your web.config file. Give IUSR and IIS_IUSRS at least "Read" permission.

The code is actually from Microsoft site, though to find it took forever! Hopefully I have saved you couple of hours.

Cheers,

Roman

Roman
  • 631
  • 1
  • 13
  • 14
1

Without Microsoft Web Administration package:

using System.Web.Configuration;
using System.Configuration;
using System.Xml;
using System.IO;

Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~");
IgnoreSection ignoreSection = configuration.GetSection("system.webServer") as IgnoreSection;
string sectionXml = ignoreSection.SectionInformation.GetRawXml();
StringReader stringReader = new StringReader(sectionXml);
XmlTextReader xmlTextReader = new XmlTextReader(stringReader);
UInt32 maxAllowedContentLength = 0;
if(xmlTextReader.ReadToDescendant("requestLimits"))
    UInt32.TryParse(xmlTextReader.GetAttribute("maxAllowedContentLength"), out maxAllowedContentLength);
figolu
  • 1,388
  • 13
  • 6
0

Try this way

You can change the below segment of code based on the web configuration in the config file

My web.config some look like

<system.web>
  <httpRuntime executionTimeout="30"  maxRequestLength="100"/>

Here you can see maxRequestLength is defined as 100 which can be changed from code behind page

Add using System.Web.Configuration;

Now write this code to change the value of maxRequestLength

Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~");
HttpRuntimeSection httpruntinesec =
    (HttpRuntimeSection)configuration.GetSection("system.web/httpRuntime");

You can use httpruntinesce instance set the value.

sharptooth
  • 167,383
  • 100
  • 513
  • 979
  • 6
    I am unsure if I should downvote this answer, as this is for reading "maxRequestLength" (from `system.web/httpRuntime`) instead of "maxAllowedContentLength" (from `system.webServer/security/requestFiltering/requestLimits`) –  May 15 '14 at 08:44
  • 1
    I consider it OK, because one can set both settings (maxRequestLength && maxAllowedContentLength) to the corresponding (same) values and use only this code skipping installing the 'Microsoft.Web.Administration' package. – Motlicek Petr Dec 14 '14 at 09:51