2016-09-28 62 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”请求,该方法生成所需的输出文件并将其返回给浏览器。

希望对某人有用。