2016-07-13 27 views
9

私はmvcサイトを作成しました。大量のjsonフォームデータ(Content-Type:application/x-www-form-urlencoded) をmvcコントローラにポストしています。私がこれを行うと、「InvalidDataException:フォーム値のカウント制限が1024を超えました」という500の応答が返されます。 、私は何の変化も表示されていない、私はweb.configファイルでこれらの値を入れ"InvalidDataException:フォーム値のカウント制限が1024を超えました。

<appSettings> 
    <add key="aspnet:MaxHttpCollectionKeys" value="5000" /> 
    <add key="aspnet:MaxJsonDeserializerMembers" value="5000" /> 
</appSettings> 

:ASPNETの以前のバージョンでは

は、あなたが限界を高めるためにweb.configファイルに以下を追加します私はMicrosoftがもうこれらの値をweb.configから読んでいないと推測しています。 しかし、私はこれらの設定をどこに設定すべきかわかりません。

フォームの値を増やすことについてのご協力をお待ちしております。

明確にすることが私のポストデータが1024未満

+1

「大量のjsonフォームデータ」とはどういう意味ですか?データを 'application/x-www-form-urlencoded'コンテンツタイプまたは' application/json'として投稿していますか? –

+0

@KiranChalla私はContent-Typeを使用しています:application/x-www-form-urlencoded –

答えて

11

ある内の項目数は、あなたがFormOptionsを使用して、デフォルトのformvalueの制限を変更することができたときに、この要求は完全に正常に動作します。 MVCを使用している場合は、フィルターを作成し、この制限を拡張し、残りのアクションのデフォルトを保持するアクションにデコレートできます。

/// <summary> 
/// Filter to set size limits for request form data 
/// </summary> 
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] 
public class RequestFormSizeLimitAttribute : Attribute, IAuthorizationFilter, IOrderedFilter 
{ 
    private readonly FormOptions _formOptions; 

    public RequestFormSizeLimitAttribute(int valueCountLimit) 
    { 
     _formOptions = new FormOptions() 
     { 
      ValueCountLimit = valueCountLimit 
     }; 
    } 

    public int Order { get; set; } 

    public void OnAuthorization(AuthorizationFilterContext context) 
    { 
     var features = context.HttpContext.Features; 
     var formFeature = features.Get<IFormFeature>(); 

     if (formFeature == null || formFeature.Form == null) 
     { 
      // Request form has not been read yet, so set the limits 
      features.Set<IFormFeature>(new FormFeature(context.HttpContext.Request, _formOptions)); 
     } 
    } 
} 

アクション

[HttpPost] 
[RequestFormSizeLimit(valueCountLimit: 2000)] 
public IActionResult ActionSpecificLimits(YourModel model) 

:あなたの行動があまりにもAntiforgery検証をサポートする必要がある場合、あなたはフィルタを注文する必要があります。例:

// Set the request form size limits *before* the antiforgery token validation filter is executed so that the 
// limits are honored when the antiforgery validation filter tries to read the form. These form size limits 
// only apply to this action. 
[HttpPost] 
[RequestFormSizeLimit(valueCountLimit: 2000, Order = 1)] 
[ValidateAntiForgeryToken(Order = 2)] 
public IActionResult ActionSpecificLimits(YourModel model) 
+0

これは魅力的でした。どうもありがとうございます! –

+0

上記のコードは問題を解決しますが、私は新しいMVCコアの変数名に更新があったと思います。 "ValueCountLimit"は "KeyCountLimit"変数になりました 新しい変数http://stepbystepschools.net/?p=1044 –

+1

で修正された変数名を持つ同じタイプの上記コードが見つかりました。これは既に新しいバージョンに実装されていますasp.netコア、コミット参照:https://github.com/aspnet/Mvc/commit/17f6b17a6dc0e76606b091187a4e43a184656c89 –

関連する問題