在ASP .NET MVC中动态生成文件下载

时间:2016-09-28 21:13:52

标签: asp.net .net asp.net-mvc asp.net-web-api knockout.js

关于如何下载通过Web API生成的文件的另一个问题。

拥有一个.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) {              
            ...
        }
      });

有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分: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. 向Web API方法发送AJAX请求以获取所需数据。传递承载令牌以验证请求。
  2. 来自1.中的请求的Json结果存储在隐藏的输入字段中。
  3. 动态创建一个包含隐藏输入字段的新表单对象。
  4. 表单向其他Web API方法提交“POST”请求(无需授权),该方法生成所需的输出文件并将其返回给浏览器。
  5. 希望这对某人有用。