ASP.NETとVB.NETの画面から送信できるアイテム数を指定するサンプルです。
(確認環境:Microsoft Visual Studio Community 2019)
目次
サンプル | 送信できるアイテム数を指定(MaxHttpCollectionKeys) |
ビュー(Index.vbhtml) | |
コントローラ(Test1Controller.cs) |
送信できるアイテム数を指定(MaxHttpCollectionKeys)
- プロジェクト配下にあるWeb.configのappSettings内にMaxHttpCollectionKeysを記述します。
- MaxHttpCollectionKeysは、送信するアイテム数(※)を指定できます。
※HttpRequestオブジェクトのクライアント提供のディクショナリ(※1)に存在できるアイテムの最大数
(※1)HttpRequest.Files、HttpRequest.Form、HttpRequest.Cookies、HttpRequest.QueryString、HttpRequest.Headers、HttpRequest.ServerVariables - デフォルト値は1000です。
- 以下は、MicrosoftのASP.NET appSettings Elementのリンクです。
(リンク先でMaxHttpCollectionKeysで検索します)
https://docs.microsoft.com/en-us/previous-versions/aspnet/hh975440(v=vs.120) - 上記のリンク先では、この値を大きくしすぎると、セキュリティ上のリスクが発生する可能性があると書いてあります。
以下は、Web.configファイルのMaxHttpCollectionKeysのサンプルです。
<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="3" />
<add key="webpages:Version" value="3.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
</configuration>
3行目は、keyに「aspnet:MaxHttpCollectionKeys」、valueに「3」を追加しました。
送信するアイテム数は、3つまで可能です。
ビュー(Index.vbhtml)
@Code
Layout = Nothing
End Code
<!DOCTYPE html>
<html>
<head>
</head>
<body>
@Using Html.BeginForm("Proc1", "Test1", FormMethod.Post, New With {.id = "form1"})
@<p>@Html.TextBox("text1", "red", New With {.maxlength = 5})</p>
@<p>@Html.TextBox("text1", "red", New With {.maxlength = 5})</p>
@<input type="submit" id="button1" value="ボタン" />
End Using
</body>
</html>
2つのテキストボックスと1つのボタンとフォームがあります。
上記の状態で画面を表示すると画面が真っ白で何も表示されません。
aspnet:MaxHttpCollectionKeysのvalueを4にすると画面が表示されました。
画面表示時でボタンを押した時
画面が表示できた状態でボタンを押す場合は、以下のメッセージが表示されます。
要求(リクエスト)から読み取ったフォーム、クエリ文字列、またはポストされたファイルのアイテム数が既に最大数に達しました。要求コレクションの最大許容カウントを現在の値 1 から変更するには、"aspnet:MaxHttpCollectionKeys" 設定を変更します。詳細については、http://go.microsoft.com/fwlink/?LinkId=238386 を参照してください。
解決法
MaxHttpCollectionKeysの値を増やすとエラーは発生しなくなります。
コントローラ(Test1Controller.cs)
Namespace Controllers
Public Class Test1Controller
Inherits Controller
<HttpGet>
Function Index() As ActionResult
Return View()
End Function
<HttpPost>
Function Proc1() As ActionResult
Return Content("OK")
End Function
End Class
End Namespace
関連の記事