22

最大アップロードサイズが100MBのASP.NET MVC3 Webアプリケーション(私が書いていない)で作業しています。今、このWebアプリケーションは、顧客のためにサーバマシンにインストールされるので、この値の最大アップロードサイズが各顧客に対して設定可能であればいいでしょう。必要に応じて、Webアプリケーションのweb.configを編集するためのアクセス権があります。web.configからシステム値を読み込み、ASP.NET MVC C#メソッドで使用する方法

<system.webServer> 
    <security> 
     <requestFiltering> 
      <requestLimits maxAllowedContentLength="104857600" /> 
     </requestFiltering> 
    </security> 
</system.webServer> 

また別の値がここにあります似ているように表示されます:

<system.web> 
    <httpRuntime maxRequestLength="104857600" executionTimeout="360" /> 
</system.web> 

104857600そのバイトは、100MBのファイルのように見える

は今そうのようなweb.configファイルに値がありますアップロードの上限。しかし、価値を変えると、これは権威ある価値ではなく、新しい限界に従わなかったことがわかりました。そこで、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ヶ所を持っていると思います。誰でもそれを正しく行う方法を知っていますか?

感謝

答えて

29

あなたのような何かを行うことができます:

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

お礼この作品!これには、 'using System.Configuration;'と 'using System.Web.Configuration;'の2つの名前空間が必要です。 httpRuntimeセクションが存在しない場合はエラー処理があるので、私はあなたの答えを受け入れました。これはnice値のデフォルト値に戻ります。 Web.configの ''セクション全体を削除しようとしましたが、ファイルのアップロードがこのコードに到達する前に完全に失敗してしまったので、間違いなく必要です。だから、もし私がデフォルト値のコードを取り除くと、それは2行になります。 – zuallauz

7

試してください:それはあるので、system.webServerセクションを読んでする簡単な方法はないように思わ

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

ありがとうございます! – zuallauz

8

machine.configから「無視された」とマークされています。

一つの方法は、直接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; 
+0

ありがとうございました!これは、今後system.webServerセクションにアクセスする必要がある場合に便利です。代わりに 'MaxRequestLength'属性だけで動作させることができました。システム内の 'maxAllowedContentLength'。webServer/security/requestFiltering/requestsLimitsは、system.web/httpRuntimeの 'MaxRequestLength'属性によってオーバーライドされているようです。 – zuallauz

+0

私のテストではオーバーライドされていないようです。私は両方の値を設定する必要があります。 – Rhyous

関連する問題