大佬教程收集整理的这篇文章主要介绍了asp.net-mvc – 在ASP.NET MVC中创建ETag过滤器,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要写这样的东西
[ETag] public ActionResult MyAction() { var mymodel = Factory.CreateModel(); return View(mymodel); }
任何想法?
using System; using System.IO; using System.Security.Cryptography; using System.Web.Mvc; public class ETagAttribute : ActionFilterAttribute { private String GetToken(Stream stream) { MD5 md5 = MD5.Create(); byte [] checksum = md5.ComputeHash(stream); return Convert.ToBase64String(checksum,checksum.Length); } public override void OnResultExecuted(ResultExecutedCo@R_197_10443@t filterCo@R_197_10443@t) { filterCo@R_197_10443@t.httpCo@R_197_10443@t.Response.AppendHeader("ETag",GetToken(filterCo@R_197_10443@t.httpCo@R_197_10443@t.Response.outputStream)); base.onResultExecuted(filterCo@R_197_10443@t); } }
这应该是有效的,但是不行。
显然,Microsoft overrode System.Web.httpResponseStream.Read(Byte [] buffer,Int32 offset,Int32 count),以便它返回“Specified方法不受支持”,不知道为什么他们会这样做,因为它继承了System。 IO.Stream基类…
哪个是混合以下资源,Response.outputStream是一个只写的流,所以我们必须使用一个Response.Filter类来读取输出流,一种古怪的,你必须在过滤器上使用一个过滤器,但是它的工作=)
http://bytes.com/topic/c-sharp/answers/494721-md5-encryption-question-communication-java
http://www.codeproject.com/KB/files/Calculating_MD5_Checksum.aspx
http://blog.gregbrant.com/post/Adding-Custom-HTTP-Headers-to-an-ASPNET-MVC-Response.aspx
http://www.infoq.com/articles/etags
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
更新
经过多次的战斗,我终于可以得到这个工作:
using System; using System.IO; using System.Security.Cryptography; using System.Web; using System.Web.Mvc; public class ETagAttribute : ActionFilterAttribute { public override void OnActionExecuTing(ActionExecuTingCo@R_197_10443@t filterCo@R_197_10443@t) { try { filterCo@R_197_10443@t.httpCo@R_197_10443@t.Response.Filter = new ETagFilter(filterCo@R_197_10443@t.httpCo@R_197_10443@t.ResponsE); } catch (System.Exception) { // Do Nothing }; } } public class ETagFilter : MemoryStream { private httpResponseBase o = null; private Stream filter = null; public ETagFilter (httpResponseBase responsE) { o = response; filter = response.Filter; } private String GetToken(Stream stream) { byte[] checksum = new byte[0]; checksum = MD5.Create().ComputeHash(stream); return Convert.ToBase64String(checksum,checksum.Length); } public override void Write(byte[] buffer,int offset,int count) { byte[] data = new byte[count]; Buffer.blockCopy(buffer,offset,data,count); filter.Write(data,count); o.AddHeader("ETag",GetToken(new MemoryStream(data))); } }
更多资源:
http://authors.aspalliance.com/aspxtreme/sys/Web/HttpResponseClassFilter.aspx
http://forums.asp.net/t/1380989.aspx/1
以上是大佬教程为你收集整理的asp.net-mvc – 在ASP.NET MVC中创建ETag过滤器全部内容,希望文章能够帮你解决asp.net-mvc – 在ASP.NET MVC中创建ETag过滤器所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。