当期望blob时,向浏览器返回有意义的错误字符串

时间:2019-04-01 20:15:00

标签: c# ajax

我正在将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,但是在某些错误情况下以某种方式读取简单的字符串吗?

0 个答案:

没有答案