2016-07-25 7 views
1

Ich habe Web-API-Projekt.Maximale HTTP-Anfrage Größe für asp web.api mit JSON

Ich muss dort JSON-Daten mit der Datei als codierte Base64-String (bis zu 200 MB) posten.

Wenn ich Daten bis zu ca. 10 mb sende, dann wird die nächste Methode normalerweise korrekt gefüllt Modell ImportMultipleFileModel.

Wenn ich mehr sende, dann ist das Modell null.

Warum?

So ändern i Methode Signatur:

[HttpPost] 
     public async Task<HttpResponseMessage> ImportMultipleFiles() 
     { 
      ImportMultipleFileModel importMultipleFileModel = null; 
      var requestData = await Request.Content.ReadAsStringAsync(); 
      try 
      { 
       JsonConvert. 
       importMultipleFileModel = JsonConvert.DeserializeObject<ImportMultipleFileModel>(requestData); 
      }catch(Exception e) 
      { } 
} 

Und für codierte 30 mb Datei i normalerweise als request JSON-String bekommen. Für 60 mb bekomme ich einen leeren String. Warum?

Next i Methode ändern

[HttpPost] 
     public async Task<HttpResponseMessage> ImportMultipleFiles() 
     { 
      ImportMultipleFileModel importMultipleFileModel = null; 
      var requestData = Request.Content.ReadAsStringAsync().Result; 
      try 
      { 
       importMultipleFileModel = JsonConvert.DeserializeObject<ImportMultipleFileModel>(requestData); 
      }catch(Exception e) 
      { } 
} 

und Deserialisierung scheiterten OutOfMemoryException.

Warum?

UPD: maxRequestLength, setzen maxAllowedContentLength zu 2147483647

+0

Es wird versucht, 60mb String in ein Konstrukt zu serialisieren, das dies nicht erlaubt. Sie möchten nicht 60 MB Speicher pro Anfrage auf irgendeine Weise halten. Aus diesem Grund verwenden Sie entweder Streams oder Sie teilen die Anfragen auf. –

Antwort

5

Versuchen Sie, die maxRequestLength Einstellung.

<httpRuntime targetFramework="4.5" maxRequestLength="65536" /> 

Oder maxAllowedContentLength (Ich bekomme immer verwirrt, die man von denen).

<security> 
    <requestFiltering> 
    <requestLimits maxAllowedContentLength="52428800" /> 
    </requestFiltering> 
</security> 

Auch würde ich Buchungsdaten auf diese Weise überprüfen. Lesen Sie this article form MSDN, es ist hauptsächlich für WCF, aber ich denke, dass der Inhalt meistens gültig ist.

Die Strategie für den Umgang mit großen Nutzlasten ist Streaming.

Seitennotiz für Ihr letztes Beispiel; Sie sollten nicht (oder vielleicht selten) .Result verwenden, wenn Sie await verwenden können. Stephen Cleary schrieb eine gute Antwort auf diese here.

+0

Es ist schon fertig. Auf 2147483647 eingestellt. Tut mir leid, ich habe es nicht angegeben. –