33

最大アップロードサイズが100MBのASP.NETMVC3Webアプリケーション(自分で作成したものではありません)を使用しています。これで、この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バイトは、100MBのファイルアップロード制限のようです。ただし、値を変更すると、これは信頼できる値ではなく、新しい制限に準拠していないことがわかりました。したがって、さらに掘り下げた後、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つの場所があります。誰かがそれを適切に行う方法を知っていますか?

どうもありがとう

4

3 に答える 3

44

あなたは次のようなことをすることができます:

int maxRequestLength = 0;
HttpRuntimeSection section =
ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
if (section != null) 
    maxRequestLength = section.MaxRequestLength;
于 2013-01-10T01:24:10.150 に答える
12

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;
于 2013-01-10T01:49:31.363 に答える
7

試す:

var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/")
var section = (System.Web.Configuration.SystemWebSectionGroup)config.GetSectionGroup("system.web")
var maxRequestLength = section.HttpRuntime.MaxRequestLength
于 2013-01-10T01:34:23.253 に答える