【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)
{
}
}