2016-07-30 17 views
0

Ich habe eine Funktion, die einen Ajax-Aufruf an ein ActionResult-Objekt sendet und einen base64-String eines hochgeladenen Bildes zusammen mit einigen sendet andere Parameter mit Informationen über die Abmessungen des Bildes. Die Daten werden zur Größenanpassung an den Server gesendet. Der Ajax-Aufruf sieht wie folgt ausDas Parameterwörterbuch enthält einen Nulleintrag für den Parameter 'imageWidth' des Typs 'System.Int32' vom Typ Nullable.

 $.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 
      } 
     }); 

Das Datenobjekt aus einer Callback-Funktion abgerufen wird, die alle Informationen bekommt ich oben erwähnt. Jetzt setze ich Haltepunkte und sorge dafür, dass das Objekt tatsächlich Werte hat.

Ich schaute auch auf die Anfrage in Fiddler und alles sieht gut aus. Das Seltsame ist, dass dies nicht immer passiert. Es passiert nur, wenn ich versuche, ein Gif zu laden, das zu groß ist. Der Fehler tritt nicht auf, wenn eine Datei nicht größer als 2 MB ist. Zur Klarstellung, ich sende nicht die Datei, nur die Base64-Zeichenfolge.

Ich weiß nicht, ob das Problem ist, dass die b64 Zeichenfolge ist zu groß oder etwas anderes, aber in der Antwort vom Server sucht alles, was ich sehe, ist dieser

Die Parameter Wörterbuch einen Nulleintrag enthält für Parameter 'imagewidth' von NULL-Typ 'System.Int32' für die Methode 'System.Web.Mvc.ActionResult Resize (System.String, Int32, Int32, Int32, Int32)'

Dies ist, was der ActionResult sieht wie

aus

Wenn ich versuche, eine andere Datei, die kleiner ist, hochzuladen, funktioniert alles gut und es gibt mir diesen Fehler nicht. Es tut mir leid, wenn diese Frage schon beantwortet wurde, aber ich habe überall nachgesehen und keine Antwort gefunden. Ich habe versucht, die dataType im Ajax-Aufruf zu ändern, ich habe versucht zu stringifying und schaute auf die Anfrage-Header.

Inhaltslänge: 4849982 Content-Type: application/x-www-form-urlencoded; charset = UTF-8

Ich weiß nicht, was ich vermisse. Jede Hilfe wäre willkommen. Danke Leute.

Anfrage

b64 bearbeitet aus
imagewidth 906
imageheight imageOriginalWidth 500
imageOriginalHeight 281

+0

Äquivalent Können Sie uns zeigen die Aufgabe der eine, und man arbeitet, das nicht funktioniert? Wenn es einen Null-Eintrag aufruft, wird etwas nicht richtig gesetzt, so dass Ihr C# es ablehnt. Eine andere Möglichkeit ist, dass der Datentyp falsch ist und die Klasse "int" dies ablehnt. Sie könnten versuchen, auf der C# -Seite alles zu einer Zeichenfolge zu machen und dann das Datenobjekt als JSON.stingifry-Objekt zu senden. – mwilson

+0

Ich würde aber die B64-String ist riesig, sie sind in jeder Hinsicht identisch, außer wie lange die Saite natürlich ist. Ich werde den Post mit den Werten in der Anfrage ohne die Zeichenfolge aktualisieren. – xort

+1

Wenn du hast es auf den Raum verengt das Problem ist, versuchen Sie, diese zu Ihrem Web-config: \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t mwilson

Antwort

0

fand schließlich eine Lösung dieses Problems.Es stellt sich heraus, dass die Standardgrenze für den Pufferschwelleneingangsstrom, wenn eine Anforderung an den Server gemacht wird, ist 4 MB

Alles, was Sie tun müssen, um zu Ihrem web.config Datei gehen und fügen Sie folgendes:

<configuration> 
    <system.web> 
    <httpRuntime maxRequestLength="xxx" /> 
    </system.web> 
</configuration> 

wo "xxx" ist die Größe, die Sie in KB

Für IIS wollen 7+ Sie auch die folgenden hinzufügen müssen:

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

Der Standardwert ist auf 30 MB

Verwandte Themen