web-dev-qa-db-ja.com

web.configからシステム値を読み取り、ASP.NET MVC C#メソッドで使用する方法

最大アップロードサイズが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つあります。誰かがそれを適切に行う方法を知っていますか?

どうもありがとう

28
zuallauz

次のようなことができます:

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

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;
10
arni

試してください:

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