Ich muss auf den Abschnitt system.webServer/security/requestFiltering/requestLimits
aus der Datei web.config zugreifen, um den Wert des Attributs maxAllowedContentLength
zu erhalten. Dieser Wert wird zum Überprüfen einer Konfiguration benötigt, sodass der Benutzer keinen höheren Wert als den in der Datei web.config definierten Wert festlegen kann. Zur Validierung dieser Konfiguration wird der Wert aus dem Attribut maxRequestLength
(system.web/httpRuntime
) ist ebenfalls erforderlich, aber wir sind immer schon diesen Wert durch den Code unten:Wie wird der Wert vom Attribut "maxAllowedContentLength" von web.config programmgesteuert abgerufen?
(ConfigurationManager.GetSection("system.web/httpRuntime") as System.Web.Configuration.HttpRuntimeSection).MaxRequestLength
Ich habe schon versucht:
(ConfigurationManager.GetSection("system.webServer") as IgnoreSection).SectionInformation.GetRawXml()
, aber es wirft eineSystem.InvalidOperationException
.(System.Web.Configuration.WebConfigurationManager.GetSection("system.webServer") as IgnoreSection).SectionInformation.GetRawXml()
, aber es wirft auch eineSystem.InvalidOperationException
.ConfigurationManager.GetSection("system.webServer/security/requestFiltering/requestLimits/maxAllowedContentLength")
, aber es gibtnull
zurück.System.Web.Configuration.WebConfigurationManager.GetSection("system.webServer/security/requestFiltering/requestLimits/maxAllowedContentLength")
, aber es gibt auchnull
zurück.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
wie DiskJunky vorgeschlagen, aber es wirft einSystem.ArgumentException
, mit der Meldung „ExePath muss angegeben werden, wenn sie nicht in einer Stand-alone-exe ausgeführt wird“.
Auch habe ich den Code unten:
using (System.IO.StreamReader reader = new System.IO.StreamReader(System.Web.HttpRuntime.AppDomainAppPath + "/web.config"))
{
System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
xmlDocument.LoadXml(reader.ReadToEnd());
if (xmlDocument.GetElementsByTagName("requestLimits").Count > 0)
{
var attrMaxAllowedContentLength = xmlDocument.GetElementsByTagName("requestLimits")[0].Attributes.Cast<System.Xml.XmlAttribute>().FirstOrDefault(atributo => atributo.Name.Equals("maxAllowedContentLength"));
return (Convert.ToDecimal(attrMaxAllowedContentLength.Value)/(decimal)(Math.Pow(1024, 2)));
}
//Default value of the configuration
return (decimal)28.6;
}
Aber ich tought es nicht die beste Lösung war.
S.S .: Ich arbeite mit der Möglichkeit, dass der Wert von maxRequestLength
und maxAllowedContentLength
abweichen kann.
P.S.2 .: Ich weiß über die Microsoft.Web.Administration, aber ich brauche eine Lösung, die diese DLL nicht beinhaltet.
Mögliches Duplikat [Get maxRequestLength Wert von spezifischem Standortpfad in config] (https://stackoverflow.com/questions/34093968/get-maxrequestlength-value-from-specific-location-path-in-config) – DiskJunky