我將CSV導出添加到使用ASP.NET Web API實現的服務中。使用ASP.NET Web Api導出文件下載
目前我有一個視圖模型(包含結果過濾的細節),它通過ajax POST請求發送到Web API控制器。 JSON響應然後在UI上呈現。這工作得很好。
現在我想將相同的視圖模型發佈到另一個控制器,我們將其命名爲ExportController
。然後我需要將文件下載到用戶。
我的想法:
後視圖模型的服務,在一些地方保存它的持久性存儲(DB或內存中緩存,無所謂),並返回一個出口令牌的用戶。 (通過出口令牌我的意思的一條信息用於識別該特定的出口)
然後從
iframe
與該令牌在URL 執行GET
請求並獲得文件作爲響應於該請求。
我現在什麼,在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存儲過濾狀態)更簡單的方法。
- 這種方法是否理智(狀態存儲在數據庫等),或者這些任務應該以另一種方式完成?
- ASP.NET Web API很適合這樣的任務,或者我應該訴諸通常的ASP.NET控制器來導出?
UPDATE:發送到服務器的數據可能超出URL lenght限制,通過GET請求,以便通過它不是一個真正的選擇。
事實上,'postData'不夠小是你可以讓你的iframe的關鍵,所有的問題:( –
做後你仍然有「組合拳」端點處理一切。 – Chris
究竟如何是否實施? –