Member 14800672 Ответов: 1

Как пропустить кэширование для конкретных методов контроллера в ASP.NET веб-api?


Допустим, у меня есть этот контроллер

public class abController : BaseApiController
{
        [HttpGet]
        [Route("api/x", Name = "x1")]
        [CacheOutput(ServerTimeSpan = 3600, ClientTimeSpan = 3600)]
        public async Task<IHttpActionResult> getX([FromUri] xRequest request)
        {

        }


        [HttpGet]
        [Route("api/y", Name = "y")]
        [ActionName("y")]
        [CacheOutput(ServerTimeSpan = 3600, ClientTimeSpan = 3600)]
        public async Task<IHttpActionResult> getY([FromUri] yRequest request)
        {

        }
}


как вы можете видеть, существует кэширование для обоих методов, но для метода
getY
есть еще один контроллер который делает POST поэтому когда POST будет сделан я хочу чтобы кэширование по методу getY было пропущено



    public class addController: BaseApiController
{
        [HttpPost]
        [InvalidateCacheOutput("y")]
        [Route("api/y/add", Name = "add")]
        public async Task<IHttpActionResult> addY([FromUri] addYRequest request)
        {

        }
}


Что я уже пробовал:

Как вы можете видеть, я поставил имя действия на метод, который я хочу пропустить кэширование в нем
[ActionName("y")]


а теперь в методе Адди я ставлю
[InvalidateCacheOutput("y")]
но это не работает

я хочу, чтобы, когда Эдди называется кэширование на Гети способ, чтобы быть пропущены

1 Ответов

Рейтинг:
0

Richard Deeming

Похоже, что вы используете Strathweb.CacheOutput библиотека. Глядя на документацию, значение передается в InvalidateCacheOutput должно быть имя метода, кэш которого вы хотите сделать недействительным. У вас нет метода под названием y на addController, так что атрибут ничего не делает.

Попробуй:

[HttpPost]
[InvalidateCacheOutput(nameof(abController.getY), typeof(abController))]
[Route("api/y/add", Name = "add")]
public async Task<IHttpActionResult> addY([FromUri] addYRequest request) ...
GitHub - filipw/Strathweb.CacheOutput: ASP.NET Web API CacheOutput - библиотека, позволяющая кэшировать выходные данные ApiControllers[^]


Member 14800672

Спасибо.. Сейчас это работает.. Но могу ли я сделать это на основе строки запроса url-адреса. Я имею в виду, если у меня есть параметр id в url-адресе.. Затем, когда я нажимаю addY для id=1, я хочу сделать недействительным кэш для getY с параметром id=1, а не другие идентификаторы

Richard Deeming

Кажется, нет никакого способа сделать это. Есть открытый билет с прошлого ноября, спрашивающий, как это сделать, без ответов.

Аннулировать кэш для определенных строк запроса · проблема #258 · filipw/Strathweb.CacheOutput · GitHub[^]