Bul*_*nes 17 asp.net-mvc-4 asp.net-web-api
在最新的ASP.NET MVC4测试版中,您如何通过ETag支持条件GET支持?ActionFilter需要能够完成为返回的资源生成ETag的请求,以便与请求中的If-None-Match标头进行比较.然后,无论If-None-Match标头中的传入ETag是否与生成的ETag相同,都将生成的ETag添加到ETag响应头.但是使用ASP.NET MVC4,我不知道从哪里开始.有什么建议?
Luk*_*ett 16
就个人而言,我不是"框架魔术"的粉丝,更喜欢网络方法中的普通旧代码,否则我们最终得到的东西更像是WCF,yuk.
因此,在Get Web方法中,手动创建响应,如下所示:
var response = this.Request.CreateResponse(HttpStatusCode.OK, obj);
string hash = obj.ModifiedDate.GetHashCode().ToString();
response.Headers.ETag =
new EntityTagHeaderValue(String.Concat("\"", hash, "\""), true);
return response;
Run Code Online (Sandbox Code Playgroud)
请注意,从时间戳的哈希码生成的ETag纯粹说明了弱实体标记系统.它还显示了所需的额外报价.
Luke Puplett 的回答让我走上了正确的轨道 (+1),但请注意,您还必须阅读服务器端的 ETag,以避免随每个请求发送所有数据:
string hash = obj.ModifiedDate.GetHashCode().ToString();
var etag = new EntityTagHeaderValue(String.Concat("\"", hash, "\""), true);
if (Request.Headers.IfNoneMatch.Any(h => h.Equals(etag)))
{
return new HttpResponseMessage(HttpStatusCode.NotModified);
}
var response = this.Request.CreateResponse(HttpStatusCode.OK, obj);
response.Headers.ETag = etag;
return response;
Run Code Online (Sandbox Code Playgroud)
尊重If-Modified-Since标题也是一个好主意。请参阅RFC 2616。
| 归档时间: |
|
| 查看次数: |
9996 次 |
| 最近记录: |