我点击一个按钮(按钮位于192.xxx.x.xxx \ Profile \ Details页面)传递给angularJS控制器文件,它调用API
$scope.docView = function () {
Method.getbyId("api call",docId).then(function(response) {
if (response.data.message != null)
window.open('//'+response.data.message);
else
alert("File Not Found !");
}).catch(function (data) {
console.log("Unknown Error");
});
}
}
API是:
[Route("api call")]
[HttpGet]
public IHttpActionResult ViewDocument (Guid? docId)
{
/*background work*/
response.Message = filePath;
}
}
catch (Exception ex)
{
Utils.Write(ex);
}
return Ok(response);
}
在response.data.message中,服务器上的文件路径(192.xxx.x.xxx \ folder \ filename)即将到来,它将通过window.open()打开该文件。但是在URL中,文件夹的整个路径是可见的,这将成为安全漏洞。因此,我想在同一控制器中“在新视图中显示文件”,该控制器将在新选项卡中打开文件。网址应该是(192.xxx.x.xxx \ Profile \ Details?docid = xxxxxxxxxxxxxxxxx)。
您正在寻找的内容,您可以在Google上快速搜索:“从ASP.NET Web API方法下载文件”。
编辑:
HttpResponseMessage response = new HttpResponseMessage();
response.StatusCode = HttpStatusCode.OK;
response.Content = new StreamContent(result);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(System.Net.Mime.DispositionTypeNames.Inline)
{
FileName = "foo.pdf"
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
您需要根据实际文件类型更改Content-Type。此外,如果文件在浏览器中实际可见,则取决于浏览器是否能够这样做。