我想用etags找到以下函数:
dt()
Run Code Online (Sandbox Code Playgroud)
但是当我浏览标签表时,我会继续用dt
他们的名字命中函数,比如
widthThing1()
widthThing2()
...
Run Code Online (Sandbox Code Playgroud)
使定义dt()
极难找到.
有没有办法只搜索我用etags搜索的确切函数?
我最近了解了 HTTP 标头的概念ETag
。(这个)但是我仍然有一个问题,对于特定的HTTP资源谁负责生成ETag?
换句话说,它是实际的应用程序、容器(例如:Tomcat)、Web 服务器/负载均衡器(例如:Apache/Nginx)?
有人可以帮忙吗?
对于 NetCore Web APIGET
方法,我需要计算返回的 ETag List<T>
。T 是 a 形式的 DTO record
,仅保存原始类型。
我想计算列表的哈希值。我正在寻找有关如何GetHashCode()
实施的信息,但找不到任何信息。object.GetHashCode()的文档
没有说明有关列表或集合的任何信息。通过代码的结果,我观察到每次运行时相同的列表数据都会创建不同的哈希码。我得出的结论是,GetHashCode()
将指针值用于引用类型项。
GetHashCode()
ofrecord
计算每个成员值的哈希码。因此,我通过循环列表项创建了列表哈希代码:
List<GetGroupsDTO> dtoList = commandResult.Value;
int hash = 17;
foreach(GetGroupsDTO dto in dtoList)
{
hash = hash * 23 + dto.GetHashCode();
}
string eTagPayload = hash.ToString().SurroundWithDoubleQuotes();
Run Code Online (Sandbox Code Playgroud)
List<T>
当然,我不想对每个人都这样做。我想覆盖GetHashCode()
,但我正在努力解决。我不知道如何覆盖通用列表。我可以派生一个新类 DTOList ,我可以在其中重写GetHashCode()
. 但这会导致其他地方变得更加复杂。由于 EFCore Set 查询的结果填充列表,我需要一个自定义转换器,然后需要一个自定义序列化器来返回 Web API 中的列表。
因此,我想知道是否应该为 List 创建一个扩展方法,或者只是一个以 List 作为参数的函数。还有其他选项可以计算 ETag 吗?如何有效计算 DTO 对象列表的 ETag?
在我的 ASP.NET MVC 2 应用程序中,我有以下几行:
Response.Cache.SetMaxAge(TimeSpan.FromDays(90));
Response.Cache.SetETag(lastWriteTime.Value.Ticks.ToString());
Run Code Online (Sandbox Code Playgroud)
使用 Fiddler 跟踪 HTTP 流,我可以看到:
ETag: 634473035667000000
Run Code Online (Sandbox Code Playgroud)
在 IIS7 下运行时,在响应标头中,但是当我在 Visual Studio 2010 Web 服务器下运行时,这个标头只是......消失了。无论我是通过 Response.Cache.SetETag() 还是通过 Response.AppendHeader("ETag", etag) 设置它,它都不会返回。
这是 IIS Web 服务器的“功能”吗?是否有一些我错过的配置设置?如果我必须附加到 IIS 进程才能调试任何东西,这将使测试缓存失效有点繁琐......
编辑:看起来,尽管调用了 Response.Cache.SetCacheability(HttpCacheability.Public),VS/Cassini 总是返回 HTTP Cache-Control 设置为“私有”的资源......这有帮助吗?
etag ×5
apache ×1
asp.net-mvc ×1
c# ×1
cassini ×1
emacs ×1
gethashcode ×1
http-headers ×1
list ×1
nginx ×1
rest ×1
tomcat ×1
wicket ×1