2016-07-30 2 views
0

ActionResult에 대한 ajax 호출을 만들고, 업로드 된 이미지의 base64 문자열을 일부와 함께 보내는 함수가 있습니다. 이미지의 크기에 대한 정보가있는 다른 매개 변수. 데이터는 다른 것들 사이의 크기 조정을 위해 서버로 전송됩니다. 아약스 호출은 다음과 같습니다.매개 변수 사전에 nullable 형식 'System.Int32'의 매개 변수 'imageWidth'에 대한 null 항목이 포함되어 있습니다.

 $.ajax({ 
      type: 'POST', 
      data: { 
       b64: data.data, 
       imageWidth: data.imageWidth, 
       imageHeight: data.imageHeight, 
       imageOriginalWidth: data.imageOriginalWidth, 
       imageOriginalHeight: data.imageOriginalHeight 
      }, 

      url: '/Image/Resize', 
      beforeSend: function() { 
       //stuff 
      }, 
      success: function (data) { 
       //stuff 
      }, 
      error: function (response) { 
       //stuff 
      } 
     }); 

데이터 객체는 위에서 언급 한 모든 정보를 가져 오는 콜백 함수에서 검색됩니다. 이제는 중단 점을 넣고 개체에 실제로 값이 있는지 확인했습니다.

나는 또한 Fiddler의 요청을 검토했으며 모든 것이 잘 보였다. 이상한 일은 이것이 항상 일어나지는 않는다는 것입니다. 너무 큰 gif를 업로드하려고 할 때만 발생합니다. 파일이 약 2MB보다 크지 않으면 오류가 발생하지 않습니다. 명확히하기 위해 파일을 보내지 않고 base64 문자열 만 전송합니다. 문제가 b64 문자열이 너무 크거나 뭔가 다른 것을이지만, 서버의 응답을보고 내가 보는 모든이

매개 변수 사전에 null 항목이 포함되어있는 경우

는 나도 몰라 'System.Web.Mvc.ActionResult 크기 조정 (선택 System.String, INT32, INT32, INT32, INT32)'에있어서 비 - 널 타입 '선택 System.Int32'의 파라미터 'IMAGEWIDTH'의

여기

는 무엇입니까 ActionResult는 다음과 같습니다.

[HttpPost] 
    public ActionResult Resize(String b64, int imageWidth, int imageHeight, int imageOriginalWidth, int imageOriginalHeight) 
    { 

     //.... 
    } 

크기가 작은 다른 파일을 업로드하려고하면 모든 것이 정상적으로 작동하며이 오류가 발생하지 않습니다. 이 질문에 대한 답변이 전에는 유감 스럽지만 어디에서나 보았고 답을 찾지 못했습니다. 나는 ajax 호출에서 dataType을 변경하려고 시도했다. 스트링 타이핑을 시도하고 요청 헤더를 살펴 보았다.

콘텐츠 길이 : 4849982 콘텐츠 유형 : application/x-www-form-urlencoded; charset = UTF-8

나는 실종 된 것을 모른다. 어떤 도움을 주시면 감사하겠습니다. 고마워.

요청

B64

밖으로 편집
IMAGEWIDTH 906
imageHeight 509
imageOriginalWidth 500
imageOriginalHeight는

+0

당신이 우리에게 작동하지 않는 작동하고 하나 하나의 목적을 보여줄 수에 해당? 그것이 null 항목을 호출하는 경우, 뭔가 올바르게 설정되지 않아서 C#이이를 거부합니다. 또 다른 가능성은 데이터 유형이 부정확하고'int' 클래스가 그것을 거부한다는 것입니다. C# 측에서 모든 것을 문자열로 만든 다음 데이터 객체를 JSON.stingifry 객체로 보낼 수 있습니다. – mwilson

+0

하지만 b64 문자열은 거대합니다. 물론 문자열 길이가 얼마인지를 제외하고는 모든면에서 동일합니다. 문자열없이 요청에있는 값이 무엇인지 게시물을 업데이트합니다. – xort

+1

당신이 문제가되는 공간을 좁혀 가지고있는 경우에, 당신의 웹 설정이 추가 시도 : \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t mwilson

답변

0

281 마침내 해결책을 발견 하였다.

:이 요청이 서버로 구성되어 입력 스트림 버퍼링 임계 값에 대한 기본 제한은 모두 당신이해야 할 다음과 같은 당신의 web.config 파일에 가서 추가하는 것입니다 4메가바이트

것을 밝혀

<configuration> 
    <system.web> 
    <httpRuntime maxRequestLength="xxx" /> 
    </system.web> 
</configuration> 
당신은 또한 다음과 같은 추가해야 7+ "xxx는"당신이 KB IIS를 들어

에서 원하는 크기입니다

:

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

기본값은 30메가바이트

관련 문제