c# - 期望 blob 时向浏览器返回有意义的错误字符串
问题描述
我正在向浏览器返回 PDF 或 XLSX 文件。我通过将发起请求的 ajax 对象的 responseType 设置为“blob”来做到这一点。这似乎可以根据需要工作。在无法创建文件的情况下,我无法找到一种将错误字符串传递给浏览器的好方法。
如果我没有在 ajax 对象上设置任何 responseType,我可以将响应文本读取为我设置的有意义的错误字符串。不过,这意味着在事情正常进行的情况下,我不再能够以 PDF 或 XLSX 文件的形式正确读取响应。当然,在收到响应后,我无法设置 ajax 对象的 responseType。
控制器
public ActionResult GetFile() {
// process work, set stream and success bool
if (wasSuccessful) {
return File(stream, "application/pdf");
}
else {
return Content("a meaningful error for the UI");
}
}
cshtml
function getFile(e, extension) {
var xhr = new XMLHttpRequest();
xhr.open('POST', e.value, true);
xhr.responseType = 'blob';
xhr.setRequestHeader('Content-Type', "application/x-www-form-urlencoded");
xhr.onload = function (ee) {
if (this.status == 200) {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
var blob = new Blob([this.response], { type: 'octet/stream' }), url = window.URL.createObjectURL(blob);
a.href = url;
a.download = "file." + extension;
a.click();
window.URL.revokeObjectURL(url);
}
};
xhr.send($("#form").serialize());
}
我可以让我的 ajax 期待一个 blob 但在某些错误条件下以某种方式读取一个简单的字符串吗?
解决方案
推荐阅读
- activiti - 如果另一个数据库也使用 Activiti,则初始化引擎无法在 MySQL 上运行
- typescript - 在 TypeScript 中获取枚举名称作为字符串
- javascript - WebGL 检查采样器中的图像(类似于 Renderdoc)?
- python - 过滤具有多对多关系的对象,检查它是否包含列表中的至少一个元素
- autohotkey - 使用 AutoHotkey 记录多个键
- android - 音频流:在后台防止“应用程序终止”
- batch-file - 添加到存档后如何在创建存档期间立即删除文件?
- c - 如何在没有相邻空行的情况下打印标准输入或文件的内容?
- java - 只允许一个 JFrame 实例?
- javascript - 如果给定的小数甚至舍入为整数,如何修改函数以返回 true,否则返回 false?