首页 > 解决方案 > 期望 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 但在某些错误条件下以某种方式读取一个简单的字符串吗?

标签: c#ajax

解决方案


推荐阅读