#asp.net-core #.net-core #caching #entity-framework-core #asp.net-core-mvc
Вопрос:
У меня есть приложение .Net Core с EF, которое возвращает страницу под названием Customer в качестве домашней страницы. Но мне нужно показать страницу недоступности приложения (AppNotAvialable.cshmtl), когда пользователь пытается получить доступ к приложению в праздничный день(список праздников хранится в таблице)вместо страницы клиента. Вместо того, чтобы запрашивать таблицу списка праздников каждый раз при доступе к домашней странице, я пытаюсь использовать кэш в памяти, чтобы я мог хранить ответы на запросы в кэше и использовать их в контроллере. Я внедряю кэш в 1-й раз, и ниже приведено то, что я пробовал
public class CustomersController : Controller
{
private readonly SurplusMouseContext _context;
private readonly IMemoryCache memoryCache;
.......................
public async Task<IActionResult> Index(string sortOrder, string searchString,
int? pageNumber, string currentFilter)
{
int holidaycheck;
var timeUtc = DateTime.UtcNow;
var easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var todayDt = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, easternZone);
bool isExist = memoryCache.TryGetValue("HolidayWk", out holidaycheck);
if (!isExist)
{
holidaycheck = (from hc in _context.HolidayWeeks
where hc.HolidateDate.Date == todayDt.Date
select hc).Count();
var cacheEntryOptions = new MemoryCacheEntryOptions()
.SetSlidingExpiration(TimeSpan.FromHours(2));
memoryCache.Set("HolidayWk", holidaycheck, cacheEntryOptions);
}
if (holidaycheck != 0)
{
return View("/Views/Customers/AppNotAvailable.cshtml");
}
else
{
когда я пытаюсь отладить приложение, оно выдает ошибку, как показано ниже
Может ли кто-нибудь, пожалуйста, подсказать, правильно ли я использую кэш в памяти здесь/что-то не хватает, и где я должен делать cacheMemory.Remove()
, Любая помощь будет очень признательна
Комментарии:
1. Вы создали экземпляр
MemoryCache
экземпляра?2. Вы связывали объекты в файле startup.cs, а затем использовали в конструкторе?
Ответ №1:
Первый шаг для проверки:
В вашем вопросе возможно, что вы не инициализировали MemoryCache
объект в конструкторе.
Есть такой пример MemoryCache
.
1 — Вы должны зарегистрироваться MemoryCache
в таких сервисах, как этот:
services.AddMemoryCache();
2 — Внедрите IMemoryCache
интерфейс в свой контроллер и инициализируйте его.
public class YourController : Controller
{
private readonly IMemoryCache _memoryCache;
public YourController(IMemoryCache memoryCache)
{
_memoryCache = memoryCache
}
}
3 — Использование кэша памяти:
public async Task<IActionResult> Index(string sortOrder, string searchString,
int? pageNumber, string currentFilter)
{
bool isExist = _memoryCache.TryGetValue("HolidayWk", out holidaycheck);
}
Комментарии:
1. Спасибо!!!! как/где мы можем очистить память.Удалить()