具体描述我也不太清楚,我是从博客园里面的老赵的博客看到两篇文章,然后根据上面的内容 自己把代码写下来,并运行实现,到最后有个问题点没指出来,因为老赵说太简单了,就没继续说了,但是还是把我难倒了,我参照的代码如下:
public class FilterForbiddenWordModule : IHttpModule { void IHttpModule.Dispose() { } public void Init(HttpApplication context) { context.PostMapRequestHandler += EventHandler(context_PostMapRequestHandler); } void context_PostMapRequestHandler(object sender, EventArgs e){ var context = (sender as HttpApplication).Context; var handlerType = context.Handler.GetType(); //这里该怎么写 怎么改 不得而知 } private static PropertyInfo s_isReadOnlyPropertyInfo; static FilterForbiddenWordModule(){ Type type = typeof(NameObjectCollectionBase); s_isReadOnlyPropertyInfo = type.GetProperty("IsReadOnly", BindingFlags.NonPublic | BindingFlags.Instance); } public class ForbiddenWord { public static string Filter(string original) { return original.Replace("FORBIDDEN_WORD", "**"); } } public enum FilterForbiddenWordType { Ignored, Normal, Json, Html }
//这个是博主说不用自定义属性 改用接口实现方式 所以这个我就取消了 //private static void ProcessCollection(NameValueCollection collection,FilterForbiddenWordAttribute filter) //{ // var copy = new NameValueCollection(); // foreach (var key in collection.AllKeys) // { // var filterType = (filter == null) ? FilterForbiddenWordType.Normal : filter.GetFilterType(key); // Array.ForEach(collection.GetValues(key), v => copy.Add(key, ForbiddenWord.Filter(v))); // } //} }
而Page页面就是加了一个跟博客内容类似的页面
public partial class Default : System.Web.UI.Page, IForbiddenWordFilter { ... FilterForbiddenWordType IForbiddenWordFilter.GetFilterType(string key) { if (key.EndsWith(this.txtPassword.ID)) return FilterForbiddenWordType.Ignored; return FilterForbiddenWordType.Normal; } }
但是问题就是当页面打开时,我要实现过滤操作 我还要改点什么?
http://www.cnblogs.com/robot/archive/2008/07/22/1248679.html
很早前写的文章,可以看看有没有帮助
您好,谢谢的回复,我看了您的文章,您写的那些内容我想我理解了,从页面接受请求进行相应的你想要的做的处理。我想了我这边的问题,当页面请求时,先处理自定义的HttpModule,而Page里面的接口签名的实现是在这之后的,我要怎么结合Page中的GetFilterType方法的返回类型与我的Module结合处理,才能达到老赵说的动态过滤呢? 不知道我的盲点在那?希望您能指出来 我去学习 然后看能否自己解决