ASP.NET Web API で実装されたサービスに CSV エクスポートを追加しています。
現在、ビュー モデル (結果フィルタリングの詳細を含む) があり、これは ajax POST 要求を介して Web API コントローラーに送信されます。次に、JSON 応答が UI にレンダリングされます。これはうまくいきます。
同じビューモデルを別のコントローラーに投稿したいので、名前を付けましょうExportController
。次に、ファイルをユーザーにダウンロードする必要があります。
私の考え:
ビュー モデルをサービスに投稿し、永続ストレージ (DB またはメモリ内キャッシュは関係ありません) のどこかに保存し、エクスポート トークンをユーザーに返します。(エクスポートトークンとは、この特定のエクスポートを識別するために使用される情報の一部を意味します)
次に、そのトークンを URL に指定して
GET
からリクエストを実行し、このリクエストに対するレスポンスとしてファイルを取得します。iframe
UIで私が今持っているもの:
var exportUrl = "URL to ExportController"
$.ajax(exportUrl, {
type: 'POST',
contentType: 'application/json',
data: postData
})
.success(function(data) {
// this should download the file
$('#export').attr('src', exportUrl + '&exportToken=' + data);
});
ここで「#export」はiframe
、ファイルのダウンロードに使用される要素です。
そして、これはエクスポートバックエンドの生のスケッチです:
public class ExportController : ApiController
{
...
// GET /api/Export
public string Get(string exportToken)
{
// get filters from DB
var filters = ExportArgumentProvider.GetFilters(exportToken);
// get data
var result = DataSource.GetData(filters);
return result;
}
// POST /api/Export
public string Post(FilterInput filters)
{
var guid = Guid.NewGuid();
// save filters to DB
ExportArgumentProvider.AddFilter(guid, filters);
return guid.ToString();
}
}
この疑似コードは明らかに機能しません。Get メソッドの戻り値の型は無視してください。
だから、質問:
- このエクスポートを行う簡単な方法はありますか (フィルター状態を DB に保存せずに)。
- このアプローチは正気ですか (DB などに保存された状態)、またはそのようなタスクは別の方法で実行する必要がありますか?
- ASP.NET Web API はそのようなタスクに適していますか、それともエクスポートには通常の ASP.NET コントローラーを使用する必要がありますか?
UPDATE : サーバーに投稿されたデータは URL の長さの制限を超える可能性があるため、GET リクエストを介して渡すことは実際にはオプションではありません。