Javascript ASP.NET核心剃须刀页面从AJAX Post下载文件
您好,我在使用AJAX帖子从ASP.NET Core Razor页面下载文件时遇到问题。我想做的事情似乎重复地简单,但已经被证明是一个真正的痛苦Javascript ASP.NET核心剃须刀页面从AJAX Post下载文件,javascript,jquery,ajax,asp.net-core,Javascript,Jquery,Ajax,Asp.net Core,您好,我在使用AJAX帖子从ASP.NET Core Razor页面下载文件时遇到问题。我想做的事情似乎重复地简单,但已经被证明是一个真正的痛苦 我不想将文件存储在服务器上,但如果需要,我可以使用TempData和guid 我想写一篇ajax文章,因为我正在从客户端发送数据来构建文件 发送到服务器的数据将被加密为字符串,该字符串将成为文件的内容。(注意:加密已在工作) 我希望该文件作为我自己的扩展名*.dat下载 下面是我的asp.net核心razor post方法 public IAc
public IActionResult OnPostDownloadEncryptedFile([FromBody] List<FileData> fileData)
{
var response = ...THIS IS A REST WEB API CALL ASYNC I am calling .Result
var byteArray = Encoding.ASCII.GetBytes(response.EncryptedData);
var stream = new MemoryStream(byteArray);
return this.File(stream, System.Net.Mime.MediaTypeNames.Application.Octet, "myfile.dat");
}
我意识到ajax帖子很可能是不完整和错误的,我不太确定如何修复我见过其他人使用window.location,但我不确定这是如何工作的。自从调试以来,我一直无法进入ajax post success函数
任何帮助都将不胜感激。我让它工作起来了,但我觉得这是一个糟糕的实现 以下是我所做的:
public IActionResult OnPostEncryptFileData([FromBody] List<FileDataItem> fileData)
{
var response = this.restEndpoint.EncryptFileData(
new FileDataEncryptionRequest()
{
FileDataListItems = new FileDataList() { FileDataItems = fileData.ToList() }
}).Result;
return new JsonResult(response.EncryptedData);
}
public FileResult OnGetDownloadEncryptedFile(string data)
{
var byteArray = Encoding.ASCII.GetBytes(data);
return this.File(byteArray, "text/plain", "test.dat");
}
我很想听到一些更好的解决方案。我让它工作了,但我觉得这是一个糟糕的实现 以下是我所做的:
public IActionResult OnPostEncryptFileData([FromBody] List<FileDataItem> fileData)
{
var response = this.restEndpoint.EncryptFileData(
new FileDataEncryptionRequest()
{
FileDataListItems = new FileDataList() { FileDataItems = fileData.ToList() }
}).Result;
return new JsonResult(response.EncryptedData);
}
public FileResult OnGetDownloadEncryptedFile(string data)
{
var byteArray = Encoding.ASCII.GetBytes(data);
return this.File(byteArray, "text/plain", "test.dat");
}
我想听听更好的解决办法
$.ajax({
type: "POST",
url: "/MySite/MyPage?handler=EncryptFileData",
beforeSend: function (xhr) { xhr.setRequestHeader("XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val()); },
data: JSON.stringify(fileData),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
alert(response);
window.location = "/MySite/MyPage?handler=DownloadEncryptedFile&data=" + response;
},
failure: function (response) {
alert(response);
}
});