如何使用基于令牌的授权来从web api下载文件

时间:2018-06-08 08:03:53

标签: asp.net angularjs

当web api使用基于令牌的授权时,如何调用WEB API方法下载文件?如果我们没有授权,我们可以下载该文件,如果我们提供window.location.href =" / api / CaseDetailsS​​vc / DownloadCaseDoc?strFileName =" + fileName。但我们希望只允许授权用户调用此web api方法。怎么解决这个问题?

这是我们的代码:

[Authorize(Roles = "RspCaseEdit")]
public class CaseDetailsSvcController : ApiController
{
    [HttpGet]
    public HttpResponseMessage DownloadCaseDoc(string strFileName)
    {
        HttpResponseMessage result = null;
        string fullPath = "CaseDocs\\"+strFileName;

        if (!File.Exists(fullPath))
        {
            result = Request.CreateResponse(HttpStatusCode.NotFound);
        }
        else
        {
            // Serve the file to the client
            result = Request.CreateResponse(HttpStatusCode.OK);
            result.Content = new StreamContent(new FileStream(fullPath, FileMode.Open, FileAccess.Read));
            result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
            result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
            result.Content.Headers.ContentDisposition.FileName = strFileName;
        }

        return result;
    }
}


//angularJs service
this.DownloadCaseDoc = function (fileName) {
    var rep = $http({
        url: "/api/CaseDetailsSvc/DownloadCaseDoc?strFileName=" + fileName,
        method: 'GET',
        headers: authHeads,
    });
    return rep;
};

//AngularJs controller
vm.downloadFile = function (fileName) {
    var response = caseService.DownloadCaseDoc(fileName).then(function (resp) {
 //What to write here to download the file.
  }, function (error) {
        console.log('here is your error', error)
    });
}

1 个答案:

答案 0 :(得分:0)

以下是解决此要求的方法。

1)构建一个API,接受您的身份验证令牌/信用卡并以二进制格式返回文件。

2)使用Filesaver.js将二进制文件转换为blob,并将它们转换为所需的文件格式。

注意:如果您的文件格式是已知的文件格式,例如文本,CSV,Excel等,这将有效。我从未尝试使用自定义文件格式,并且不能说这是否有效!。