【问题标题】:Dynamicly generated file download in ASP .NET MVC在 ASP .NET MVC 中动态生成的文件下载
【发布时间】:2017-02-07 00:56:29
【问题描述】:

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

拥有一个 .NET Web 应用程序,其中 Web API 控制器使用基于令牌的身份验证和带有敲除/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) {              
            ...
        }
      });

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

【问题讨论】:

  • 不要进行 ajax 调用。发出正常的http请求

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


【解决方案1】:

我最终在成功回调中添加了以下代码` 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. Form 向其他 Web API 方法(无需授权)提交“POST”请求,该方法生成所需的输出文件并将其返回给浏览器。

希望这对某人有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    相关资源
    最近更新 更多