Я работаю над одностраничным приложением, использующим ASP.Net Core MVC и JQuery (выполнение полного обновления страницы сбрасывает некоторые длительные процессы, поэтому я должен использовать AJAX для всей навигации, чтобы избежать этого.)
Я хочу разрешить пользователю загружать PDF, который может быть достаточно просто обработан с помощью моего PdfController:
public async Task<IActionResult> GetFile(int FileID)
{
byte[] fileBytes = await _myService.GetFile(FileID);
return File(fileBytes, "DesiredMimeType", "DesiredFileName");
}
В этом простом случае я могу использовать что-то вроде <a href="/Pdf/GetFile?FileID=123">Get File 123</a>
и загрузка файловничего не напортачив.Проблема в том, что иногда мой сервис выдает исключение, если параметры неверны.Я хотел бы иметь возможность отображать пользовательскую страницу ошибки (используя AJAX), поэтому теперь мое действие контроллера становится:
public async Task<IActionResult> Index(int FileID)
{
try
{
byte[] fileBytes = await _myService.GetFile(FileID);
return File(fileBytes, "DesiredMimeType", "DesiredFileName");
}
catch (MyCustomException ex)
{
return PartialView("MyErrorPage", new MyErrorViewModel(ex));
}
}
Это прекрасно работает на стороне сервера, но я не знаю, как справитьсяэто на стороне клиента.JavaScript должен выглядеть примерно так:
function getFile(fileID) {
$.get('/Pdf/GetFile?FileID=' + fileID, function (data) {
// pseudo code - not sure what to do here
if (isFile(data)) {
// then prompt a download and leave the DOM alone
} else {
// display error page
$('#ajax-container').html(data);
}
}).fail(function (jqXHR, textStatus, errorThrown) {
notify('Web service responded with ' + textStatus);
});
}
Итак, мой вопрос: как я могу использовать JQuery или JavaScript, чтобы определить, является ли data
файлом или частичным представлением, и как я могу вызватьскачать файл, если это файл?Если есть лучший подход, я также открыт для рекомендаций.