質問 1 : 与えられたルーティング パターンのみにアップロード制限を設定する方法はありますか?
<location>
ノードが動的 URL をサポートしていないため、私が認識していることはありません。しかし、 URL 書き換えモジュールを使用してごまかすことができます。
ファイルのアップロードを処理するコントローラーがあるとします。
public class PicturesController
{
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file, int dynamicValue)
{
...
}
}
そして、このコントローラーに一致するように構成されたルートがあること:
routes.MapRoute(
"Upload",
"{dynamicvalue}/ConvertModule/Upload",
new { controller = "Pictures", action = "Upload" },
new { dynamicvalue = @"^[0-9]+$" }
);
では、web.config で次の書き換えルールを設定しましょう。
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="rewrite the file upload path" enabled="true">
<match url="^([0-9]+)/ConvertModule/Upload$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="pictures/upload?dynamicvalue={R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
<location>
これまでのところ、次のようにセットアップできますpictures/upload
。
<location path="pictures/upload">
<system.web>
<!-- Limit to 200MB -->
<httpRuntime maxRequestLength="204800" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- Limit to 200MB -->
<requestLimits maxAllowedContentLength="209715200" />
</requestFiltering>
</security>
</system.webServer>
</location>
これで、次のパターンの URL にアップロードできます: {dynamicvalue}/ConvertModule/Upload
URL 書き換えモジュールはそれを書き換えますpictures/upload?dynamicvalue={dynamicvalue}
が、<location>
タグは一致pictures/upload
し、制限を正常に適用します:
<form action="/123/ConvertModule/Upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit">OK</button>
</form>
質問 2:アップロード サイズを超えたときにカスタム警告を表示することはできますか?
いいえ、制限をより大きな値に設定し、アップロード ハンドラ内でファイル サイズを確認する必要があります。また、クライアント (HTML5、Flash、Silverlight など) でファイル サイズを確認できる場合は、帯域幅の浪費を避けるために確認してください。