如何在ASP.NET MVC 4和jquery中使用web api下载文件

前端之家收集整理的这篇文章主要介绍了如何在ASP.NET MVC 4和jquery中使用web api下载文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是新来使用ASP.NET MVC 4与Web Api.

我想允许用户下载一个文件,这个文件我将在服务器端创建.为了创建文件,我已经设法掌握了以下代码

[ActionName("Export")]
public HttpResponseMessage PostExportData(SomeModel model)
{           
    string csv = _service.GetData(model);
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    result.Content = new StringContent(csv);
    //a text file is actually an octet-stream (pdf,etc)
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    //we used attachment to force download
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    result.Content.Headers.ContentDisposition.FileName = "file.csv";
    return result;            
}

如何使用JQUERY来呼叫这个WEB API方法

但是我不知道如何使用jquery调用这个web api,并让它给我一个文件,在你下载任何文件时你通常会得到一个“保存为/打开”选项.

有人可以帮我,指导我如何打电话并下载文件.谢谢.

解决方法

您可以在要使用jquery的视图中执行此操作.我假设控制器的名称是ExportController.您还必须分解模型变量,或者在HttpResponseMessage PostExportData(SomeModel模型)中收集模型,
通过其他方式.

HTML:

<a class="export">export</a>

JavaScript的:

<script>
$('a.export').click(function(e) {
    e.preventDefault();  //stop the browser from following
    window.location.href = '@Url.Action('Export','ExportController',new { property = model.property,property = model.property2 })';
});
</script>

使用POST

function UpdateForm(modelObject) {
   if ($('#hidden-form').length < 1)
   {
       $('<form>').attr({
           method: 'POST',id: 'hidden-form',action: '@Url.Action('Export','Export')'
       }).appendTo('body');
   }
   $('#hidden-form').html('');
   for(var propertyName in modelObject) {
       $('<input>').attr({
            type: 'hidden',id: propertyName,name: propertyName,value: modelObject[propertyName]
       }).appendTo('#hidden-form');
    }
}

$('a.export').click(function(e) {
    e.preventDefault();
    var modelObject = { property1 : "property1" };
    UpdateForm(modelObject);
    $('#hidden-form').submit();
});

然后你可以通过js发布#隐藏表单,这将触发文件下载

更新:这是一个完整的发布示例,它没有检查打字错误等,以便调试任何小的错误.

猜你在找的asp.Net相关文章