最大アップロードサイズが100MBのASP.NET MVC3 Webアプリケーション(私が作成したものではありません)に取り組んでいます。これで、このWebアプリケーションは顧客のサーバーマシンにインストールされるので、この値の最大アップロードサイズを顧客ごとに構成できればいいでしょう。必要に応じて、Webアプリケーションのweb.configを編集するためのアクセス権があります。
今のようにweb.configに値があります:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600" />
</requestFiltering>
</security>
</system.webServer>
同様に見える別の値もここにあります:
<system.web>
<httpRuntime maxRequestLength="104857600" executionTimeout="360" />
</system.web>
その104857600バイトは、100 MBのファイルアップロード制限のようです。ただし、値を変更したところ、これは正式な値ではなく、新しい制限に従っていないことがわかりました。したがって、さらに掘り下げた後、C#コードの別の場所でハードコードされた値public const double MaxContentSize = 104857600
が見つかり、別のC#メソッドがその値を使用してAjaxファイルのアップロードを許可/拒否していました。
だから私がやりたいのは、コード内のハードコードされた数値を置き換えて、web.configの値から読み取ることです。次に、少なくとも誰でも、Webサイトを展開するときにweb.configでその値を変更できます。
このようなことができますか?
MaxContentSize = ConfigurationManager.systemWeb.httpRuntime['maxRequestLength'];
Web.configでappSettingsを使用する例をいくつか見ました。
<appSettings><add key="MySetting" value="104857600" /></appSettings>
それからそれにアクセスする:
ConfigurationManager.AppSettings["MySetting"]
しかし、それはそこにカスタム値を追加することを意味し、web.configでそれを変更する場所が3つあります。誰かがそれを適切に行う方法を知っていますか?
どうもありがとう
次のようなことができます:
int maxRequestLength = 0;
HttpRuntimeSection section =
ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
if (section != null)
maxRequestLength = section.MaxRequestLength;
System.webServerセクションはmachine.configから「無視」としてマークされているため、簡単に読み取る方法はないようです。
1つの方法は、web.configファイルのXMLを直接解析することです。
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;
試してください:
var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/")
var section = (System.Web.Configuration.SystemWebSectionGroup)config.GetSectionGroup("system.web")
var maxRequestLength = section.HttpRuntime.MaxRequestLength