Я пишу .Net MVC приложение и использую Workbox. Я пытаюсь использовать стратегию NetworkFirst для «выборки» - в моем сервис-работнике у меня есть следующее: -
const API_ProductLoadData_URL = '/Product/LoadData';
const ProductLoadData_CacheName = 'product-index-loaddata';
const apiProductLoadDataCallHandler = new workbox.strategies.NetworkFirst({
cacheName: ProductLoadData_CacheName,
networkTimeoutSeconds: 5,
plugins: [
new workbox.expiration.Plugin({
maxAgeSeconds: 60 * 60,
maxEntries: 10,
}),
]
});
workbox.routing.registerRoute(
API_ProductLoadData_URL,
apiProductLoadDataCallHandler
);
self.addEventListener('install', event => {
event.waitUntil(
caches.open(ProductLoadData_CacheName)
.then(cache => cache.add(API_ProductLoadData_URL))
);
});
self.addEventListener('fetch', (event) => {
event.respondWith(async function() {
try {
const fetchResponse = await fetch(event.request);
if (fetchResponse.status === 404) {
return await caches.match(event.request);
} else {
return fetchResponse;
}
} catch (err) {
return await caches.match(event.request);
}
}());
});
В коде моей веб-страницы у меня есть следующее: -
const API_ProductLoadData_URL = '/Product/LoadData';
fetch(API_ProductLoadData_URL, {
})
.then(function (response) {
var contentType = response.headers.get('content-type');
if (contentType && contentType.includes('application/json')) {
return response.json();
}
throw new TypeError("Oops, we haven't got JSON!");
})
.then(function (json) {
...
)}
Когда я пытаюсь описать вышеизложенное с использованием стратегии CacheFirst или StaleWhileRevalidate, все выглядит нормально (с настройкой кода в сервисном работнике) - т.е. маршрут ведет себя так, как и следовало ожидать - выборка перехватывается и код внутриОбработчик «fetch» выполняет возврат обратно кэшированного JSON
Однако, когда я не в сети, хотя я думаю, что маршрут выборки подключен правильно, он все равно выбрасывает 404 (не найдено) на моей странице - я быожидал, что 404 будет обработан в маршрутизации 'fetch' (работник службы), и кэшированный результат будет возвращен на мою страницу
Примечание - я тестирую локально (на моей машине) - для имитации автономно, яя прекращаю работу IIS
Кто-нибудь знает, почему я не могу заставить обработчик события выборки работника службы передать мне обратно кэшированный результат, если произошел сбой сети