当web api使用基于令牌的授权时,如何调用WEB API方法下载文件?如果我们没有授权,我们可以下载该文件,如果我们提供window.location.href =" / api / CaseDetailsSvc / 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)
});
}
答案 0 :(得分:0)
以下是解决此要求的方法。
1)构建一个API,接受您的身份验证令牌/信用卡并以二进制格式返回文件。
2)使用Filesaver.js将二进制文件转换为blob,并将它们转换为所需的文件格式。
注意:如果您的文件格式是已知的文件格式,例如文本,CSV,Excel等,这将有效。我从未尝试使用自定义文件格式,并且不能说这是否有效!。