2016-09-28 61 views
0

關於如何下載通過Web API生成的文件的另一個問題。在ASP .NET中動態生成的文件下載MVC

擁有一個.NET Web應用程序,Web API控制器使用基於標記的身份驗證以及帶有knockout/jquery的普通MVC視圖。

我的問題是: 在客戶端瀏覽器中返回文件下載作爲響應的最佳方式是什麼?

望着下面的方法:

$.ajax({ 
     type: 'GET', 
     url: "/api/Returns", 
     data: { fromMonth: selFromMonth.value, toMonth: selToMonth.value}, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     headers: { 'Authorization': 'Bearer ' + accessToken }, 
     success: function (result) {    
      ... 
     } 
     }); 

有沒有更好的方式來實現這一目標?

+0

不要打ajax電話。建立一個正常的http請求 – Shyju

回答

0

我最終在成功回調中添加了以下代碼:# var form = document.createElement(「form」); var txt = document.createElement(「input」);

  form.method = "POST"; 
      form.action = "/api/Reports"; 

      txt.value = JSON.stringify(result); 
      txt.name = "txt"; 
      txt.type = "hidden"; 

      form.appendChild(txt); 

      document.body.appendChild(form); 

      form.submit(); ` 

也不得不增加在Web API方法如下更改:

public HttpResponseMessage Post([FromBody]JToken jsonbody) 
{ 
    if (jsonbody["data"] != null) 
     { 
      var data = JsonConvert.DeserializeObject<List<Return>>(jsonbody["data"].ToString()); 

     } 
} 

詳細說明一下什麼這一切背後的理念是:

  1. 發送一個Ajax請求一個Web API方法以獲取所需的數據。不記名令牌傳遞以驗證請求。
  2. Json結果來自請求中的1.存儲在一個隱藏的輸入字段中。
  3. 動態創建一個包含隱藏輸入字段的新表單對象。
  4. 表單向其他Web API方法(無需授權)提交「POST」請求,該方法生成所需的輸出文件並將其返回給瀏覽器。

希望對某人有用。