gpt4 book ai didi

c# - ASP.net 缓存 ASHX 文件服务器端

转载 作者:行者123 更新时间:2023-11-30 19:27:48 25 4
gpt4 key购买 nike

给定通用处理程序:

<%@ WebHandler Language="C#" Class="autocomp" %>

using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;

public class autocomp : IHttpHandler {

public void ProcessRequest (HttpContext context) {

context.Response.ContentType = "application/json";
context.Response.BufferOutput = true;

var searchTerm = (context.Request.QueryString["name_startsWith"] + "").Trim();

context.Response.Write(searchTerm);
context.Response.Write(DateTime.Now.ToString("s"));

context.Response.Flush();
}

public bool IsReusable {
get {
return false;
}
}

}

我如何服务器端根据name_startsWith查询字符串参数将该文件缓存1小时?使用网络用户控件很容易:

<%@ OutputCache Duration="120" VaryByParam="paramName" %>

但我已经四处寻找了一段时间以对通用处理程序 (ashx) 文件执行相同的操作,但找不到任何解决方案。

最佳答案

使用您提供的代码,您告诉最终用户浏览器将结果缓存 30 分钟,因此您没有进行任何服务器端缓存。

如果您想在服务器端缓存结果,您可能正在寻找 HttpRuntime.Cache .这将允许您将项目插入到全局可用的缓存中。然后在页面加载时,您可能想要检查缓存项目是否存在,如果该项目不存在或在缓存中已过期,则转到数据库并检索对象。

编辑

通过您更新的代码示例,我找到了 https://stackoverflow.com/a/6234787/254973这在我的测试中有效。所以在你的情况下你可以这样做:

public class autocomp : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
OutputCachedPage page = new OutputCachedPage(new OutputCacheParameters
{
Duration = 120,
Location = OutputCacheLocation.Server,
VaryByParam = "name_startsWith"
});

page.ProcessRequest(HttpContext.Current);

context.Response.ContentType = "application/json";
context.Response.BufferOutput = true;

var searchTerm = (context.Request.QueryString["name_startsWith"] + "").Trim();

context.Response.Write(searchTerm);
context.Response.Write(DateTime.Now.ToString("s"));
}

public bool IsReusable
{
get
{
return false;
}
}
private sealed class OutputCachedPage : Page
{
private OutputCacheParameters _cacheSettings;

public OutputCachedPage(OutputCacheParameters cacheSettings)
{
// Tracing requires Page IDs to be unique.
ID = Guid.NewGuid().ToString();
_cacheSettings = cacheSettings;
}

protected override void FrameworkInitialize()
{
base.FrameworkInitialize();
InitOutputCache(_cacheSettings);
}
}
}

关于c# - ASP.net 缓存 ASHX 文件服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17595343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com