私はweb apiプロジェクトを持っています。jsonのasp web.apiの最大HTTP要求サイズ
jsonデータをコード化されたbase64文字列(最大200 MB)としてファイルに書き込む必要があります。
もし私が約10MBまでのデータを送るならば、次のメソッドは通常、モデルImportMultipleFileModelを適切に埋めます。
[HttpPost]
public async Task<HttpResponseMessage> ImportMultipleFiles(ImportMultipleFileModel importMultipleFileModel)
{
var response = ImportFiles(importFileModel);
return response;
}
さらに送信すると、モデルはnullです。
なぜですか?
だから私はにメソッドシグネチャを変更します。
[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)
{ }
}
符号化された30メガバイトのファイルのために、私は通常、JSON文字列としてrequestDataを取得します。 60 MBのために私は空の文字列を得る。 なぜですか?
次私は
[HttpPost]
public async Task<HttpResponseMessage> ImportMultipleFiles()
{
ImportMultipleFileModel importMultipleFileModel = null;
var requestData = Request.Content.ReadAsStringAsync().Result;
try
{
importMultipleFileModel = JsonConvert.DeserializeObject<ImportMultipleFileModel>(requestData);
}catch(Exception e)
{ }
}
とデシリアライズに方法を変更するには、理由のOutOfMemoryException失敗しました。
なぜですか?
UPD: maxRequestLength、maxAllowedContentLengthはmaxRequestLength
を設定してみてください2147483647
これは60mbの文字列を、これを許さない構造にシリアル化しようとしています。要求ごとに60MBのメモリを保持する必要はありません。このため、ストリームを使用するか、リクエストを分割します。 –