C# 如何在自托管WebAPI应用程序中正确缓存数据

C# 如何在自托管WebAPI应用程序中正确缓存数据,c#,asp.net-web-api,C#,Asp.net Web Api,我有一个C WebAPI应用程序,使用TopShelf自托管。 我需要在应用程序启动时查询一些数据库,然后缓存静态结果,以便WebAPI控制器进行任何后续访问,从而优化一些数据访问。 我的解决方案包括两个项目: ServiceHub.Topshelf.WebAPI,其中包含所有业务逻辑和Topshelf.WebPI,而Topshelf.WebPI仅承载WebApiConfigurator.cs 进行这种类型的数据缓存的合适技术是什么?正如Ric所建议的,我已经研究了Cache类。以下是我在SIg

我有一个C WebAPI应用程序,使用TopShelf自托管。 我需要在应用程序启动时查询一些数据库,然后缓存静态结果,以便WebAPI控制器进行任何后续访问,从而优化一些数据访问。 我的解决方案包括两个项目:

ServiceHub.Topshelf.WebAPI,其中包含所有业务逻辑和Topshelf.WebPI,而Topshelf.WebPI仅承载WebApiConfigurator.cs


进行这种类型的数据缓存的合适技术是什么?

正如Ric所建议的,我已经研究了Cache类。以下是我在SIgnedContractsController.csc中完成缓存的步骤:

using System.Runtime.Caching;
.....
ObjectCache cache;
List<Model.SignedContracts> allSignedContracts;
.....

cache = MemoryCache.Default;
            allSignedContracts = cache["signed_contracts"] as List<Model.SignedContracts>;

            if (allSignedContracts == null)
            {
                allSignedContracts = new List<Model.SignedContracts>();
                CacheItemPolicy policy = new CacheItemPolicy();
                policy.AbsoluteExpiration = DateTimeOffset.Now.AddHours(1.0);
                var result = (from contracts in new XPQuery<Model.SignedContracts>(uow) select contracts);
                foreach (var item in result)
                {
                    allSignedContracts.Add(item); 
                }
                cache.Add("signed_contracts",allSignedContracts,policy);

            }

….

您看过缓存类了吗?我想我明白了,现在就把它贴出来作为答案。非常感谢。不错。做这种事很常见。
public HttpResponseMessage Get()
        {

            var _americasPriorWeekThree = Convert.ToInt32((from contracts in allSignedContracts
                                                           where contracts.Region == "Americas"
                                                       select contracts.PriorWeek3).First());