2016-07-13 6 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 –