技术开发 频道

另类的动态加载用户控件


【IT168技术文档】

  建立一个实现了接口IHttpHandlerFactory的类.
  IHttpHandlerFactory 类型公开了以下成员。
  方法 :
  GetHandler 返回实现 IHttpHandler 接口的类的实例。
  ReleaseHandler 使工厂可以重用现有的处理程序实例。
public class WebPageHandlerFactory : IHttpHandlerFactory { public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string path) { if (IsExistedPage(path)) { return PageParser.GetCompiledPageInstance(url, path, context); } if (!path.ToLower().EndsWith(".aspx")) { path = Path.Combine(path, "webform2.aspx"); } url = ReplaceUrl(url); path = ReplaceUrl(path); return PageParser.GetCompiledPageInstance(url, path, context); } /**//// <summary> /// 判断当前请求的URL是否真实存在 /// </summary> /// <param name="path">请求URL的相对路径</param> /// <returns></returns> private bool IsExistedPage(string path) { //首页是已经存在的 if (path.ToLower().IndexOf("webform2.aspx") > 0) { return true; } return false; } /**//// <summary> /// 把实际不存在的页面名称转换成已经真实存在的default.aspx /// 例如:default2.aspx实际不存在,则把default2.aspx转换成default.aspx /// </summary> /// <param name="input">当前请求的但实际并不存在的URL 例如:default2.aspx</param> /// <returns></returns> private string ReplaceUrl(string input) { // Regex search and replace RegexOptions options = RegexOptions.None; Regex regex = new Regex(@"\w+.aspx", options); string replacement = @"webform2.aspx"; string result = regex.Replace(input, replacement); return result; } public virtual void ReleaseHandler(IHttpHandler handler) { } }
0
相关文章