【问题标题】:Cache an object in a .ashx handler在 .ashx 处理程序中缓存对象
【发布时间】:2023-03-03 16:14:01
【问题描述】:

我不确定解决此问题的最佳方法,但这是我的方案。

假设我有一个 ashx 处理程序,它向客户端的 ajax 请求提供一些数据。像这样简单的东西:

public class Handler : IHttpHandler
{
    private List<MyObject> data;

    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        data = GetData();
        string result;

        switch (context.Request.QueryString["requestType"])
        {
            case "case":
                result = Foo.Bar(data).GetJSON();
                break;

            // .. several more data conversitions / comparisions 
        }

        context.Response.Write(result);
    }

    public class MyObject
    {
        public int Id { get; set; }
        public string Data { get; set; }
    }
}

我将如何缓存 MyObject 的列表,以便在每次向服务发出请求时都不会重新构建它?假设 MyObject 的列表有数千个结果,我想将其缓存约 1 分钟。我可以使用 context.Cache 吗?

基本上;我不想缓存处理程序的输出。只是一个包含数据的对象。

编辑: 我正在寻找类似的东西:

data = (List<MyObject>) context.Cache["data"];

if (data == null || !data.Any())
{
    data = GetData();
    context.Cache.Insert("data", data, null, DateTime.Now.AddMinutes(1), System.Web.Caching.Cache.NoSlidingExpiration);
}

【问题讨论】:

    标签: asp.net caching ashx


    【解决方案1】:

    您可以将result 添加到 HttpContext.Current.Cache,如下所示:

    var requestType = context.Request.QueryString["requestType"];
    HttpContext.Current.Cache[requestType] = result;
    

    【讨论】:

      猜你喜欢
      • 2011-11-16
      • 2010-12-12
      • 2012-11-25
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      相关资源
      最近更新 更多