У меня есть следующий запрос на загрузку файла (используя vue-resource
):
this.$http.get(fileUrl, { responseType: 'arraybuffer' }).
then(
(response) => {
let blob = new Blob([response.data], { type: response.headers.get('content-type') });
let link = document.createElement('a');
link.setAttribute("type", "hidden");
link.href = window.URL.createObjectURL(blob);
let disposition = response.headers.get('content-disposition');
let matches = /.*filename=(.*);.*/.exec(disposition);
let filename = (matches != null && matches[1])
? matches[1]
: 'file';
if (filename.startsWith('"')
&& filename.endsWith('"')) {
filename = filename.substr(1, filename.length - 2);
}
link.download = filename;
document.body.appendChild(link);
link.click();
link.remove();
},
(errorResponse) => {
// TODO: errorResponse doesn't actually have the error message somehow
console.error(errorResponse);
});
В моем бэк-энде (C# asp. net core) я бросаю выполнение вот так:
throw new DomainException("ErrorMessage");
Я вижу в запросе в devtools, что сообщение "ErrorMessage"
определенно отправляется обратно. Это единственное, что видно как на вкладке ответа, так и на вкладке предварительного просмотра в chrome.
Однако я не могу нигде найти это сообщение, чтобы показать пользователю.
Обычно я бы получил это из errorResponse.bodyText
, но это undefined
в данном случае
Я перепробовал все, начиная с вызова errorResponse.body
, errorResponse.bodyText
(все дает undefined
) и даже пробовал читать с
var decodedString = String.fromCharCode.apply(null, errorResponse.body);
var obj = JSON.parse(decodedString);
var message = obj['message'];
, который просто вызывает больше ошибок:
myMixin.ts: 257 Uncaught (в обещании) SyntaxError: Неожиданный конец JSON ввода в JSON .parse () в VueComponent. (myMixin.ts: 257)
Повторная попытка описанного выше, но передача new Uint8Array(errorResponse.body)
дает мне
myMixin.ts: 257 Uncaught (в обещании) SyntaxError: Unexpected токен N в JSON в позиции 0 в JSON .parse () в VueComponent. (myMixin.ts: 257)
Удаление , { responseType: 'arraybuffer' }
, я вижу, что сообщение об ошибке существует в errorResponse.bodyText
.
Почему это происходит? Как я могу просто получить сообщение об ошибке - которое явно существует, поскольку я вижу его на вкладке сети - и просто зарегистрировать его на консоли?