相关文章
网站制作CSS制作水平导航菜单效果
网页设计CSS在IE和Nascape的显示差别
北京网站制作常用CSS
网站制作制作虚线效果的水平线
北京网站建设教程/dreamweaver/技巧 去除DW MX 2004表格宽度辅助
网站制作Flash MX常用快捷键一览
网站建设一些动作分解图
网页设计教你做一个Flash的时钟
北京网站建设Dreamweaver MX进阶教程(三)轻松制作弹出菜单
北京网站建设通过Dreamweaver设计网页时组织CSS的建议
品牌理念
北京网站建设最佳合作伙伴
北京网站建设专家企通互联
竭诚为您提供网站建设服务!
友好连接
文章搜索
你的位置:首页 >> 网站制作 >> 网页设计.text urlRewrite介绍
网页设计.text urlRewrite介绍
作者: 北京网站建设 日期:2008-03-27 06:03:34 来源: http://www.qitongnet.com
1、花絮: 网站建设
第一次拿到dottext时,开始让我比较觉得比较奇怪的是 北京网站制作
北京网站建设
一、以floerggyy注册后通过URL:http://x.x.x.x/floerggyy即可进入自己的 北京网页设计blog里 北京网站建设
(其实忘了以前常做下载页面download.aspx也不过是处理了HttpHandler的虚页面而已,可能是见在.Text兴奋的连这些基本常识都忘了^_^) 企通互联
网站制作
二、居然可以拿用户名做用户的唯一标识但在表里面没有找到做为用户名UserName唯一约束的东东(到现在还不清楚在数据库哪个地方设置的,有知道的请指点下) 北京网页设计
后来通过重得注册同一用户名查看抛出的异常信息,确认确实在有UserName做为唯一约束的东东。 网页设计
唉,看来我对数据库一无所知。 北京网页设计
北京网站设计
网站制作
北京网站制作
...后来决定专写一篇关于 网站制作URL重写的文章,后来看到dottext的原作者也简单介绍了下urlRewrite,于是这个想法就放弃了。 北京网站制作
后来又有一些朋友问dottext关于URL的问题,看来还是写吧 企通互联
企通互联
2、配置文件WebConfig.config简单浏览 北京网页设计
网页设计
自定义配置节内容: 北京网站设计
<configSections> 网页设计
<section name="BlogConfigurationSettings" type="Dottext.Framework.Util.XmlSerializerSectionHandler, Dottext.Framework" /> 北京网站制作
<section name="HandlerConfiguration" type="Dottext.Framework.Util.XmlSerializerSectionHandler, Dottext.Framework" /> 网站设计
<section name="SearchConfiguration" type="Dottext.Framework.Util.XmlSerializerSectionHandler, Dottext.Framework" /> 网站设计
<section name="microsoft.web.services" type="Microsoft.Web.Services.Configuration.WebServicesConfiguration, Microsoft.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 网站设计
<section name="codeHighlighter" type="ActiproSoftware.CodeHighlighter.CodeHighlighterConfigurationSectionHandler, ActiproSoftware.CodeHighlighter" /> 网站制作
</configSections> 北京网站设计
北京网站制作
HttpHandler的配置内容: 网站设计
<httpHandlers> 北京网页设计
<add verb="*" path="*.asmx" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 北京网页设计
validate="false" /> 企通互联网站建设
<add verb="*" path="Error.aspx" type="System.Web.UI.PageHandlerFactory" /> 北京网站制作
<add verb="*" path="*" type="Dottext.Common.UrlManager.UrlReWriteHandlerFactory,Dottext.Common" /> 网站制作
</httpHandlers> 北京网站制作
网站制作
HttpModule的配置内容: 北京网站建设
<httpModules> 网站设计
<add name="UrlReWriteModule" type="Dottext.Common.UrlManager.UrlReWriteModule, Dottext.Common" /> 北京网站设计
<add name="EventHttpModule" type="Dottext.Framework.ScheduledEvents.EventHttpModule, Dottext.Framework" /> 北京网站建设
</httpModules> 北京网站制作
北京网站制作
网站设计
网页设计
见到一个陌生的项目首先打开它的配置文件看看,这是我的习惯:) 网站设计
先看看一些重点的配置内容: 网站建设
网站建设
看完Web.config中的上述内容熟悉asp.net运行机制的朋友就明白,DotText代码的运行顺序。在这里我再简单重复下 北京网站制作
aspnet的内部运行机制(若有不熟悉的朋友请参阅<<ASP.NET FameWork深度历险>>这本书,它对做asp.net开发的朋友很有帮助): 网页设计
remote client Request---->IIS---->aspnet_isapi.dll-->aspnet_wp.exe-->HttpRuntime---> 北京网站设计
HttpModule--->HttpHandler Factory--->HttpHandler--->HttpHandler.ProcessRequest()-->Response client Request 网页设计
好了,题归正转,client Request首先是被HttpModule截获。当我们请求.text的URL:http://www.cnblogs.com/floerggyy/时,首先是 网站建设
Dottext.Common.UrlManager命名空间下类UrlReWriteModule的相关方法被调用。 网站建设
(为什么会被类UrlReWriteModule www.qitongnet.com截获远程请求呢?上面HttpModule配置节的内容不是标明了吗???^_^ 网站制作
明知故问,那么为Dottext.Framework.ScheduledEvents命名空间下的类EventHttpModule会不会截获远程请求?什么时候截获呢? 北京网站制作
当然是按先来后顺序了,中国的优良传统都忘了!!! 网页设计
(其实这样说也是不太准确的,这两个HttpModule确是按顺序执行的但在HttpModule里的一些事件中它们是交叉运行的,好了类EventHttpModule 网站设计
不在我们的计论范围内在下面的代码就不分析了,有对这块不明白的最好去看下上面推荐的那本书^_^) 企通互联
网页设计
3 、URL重写,部分代码分析(这块涉及到众多自定义配置节、HttpModule、HttpHandler的综合应用所以要理顺还是有点麻烦的,要有一小点分析别人代码的耐心。个人认为) 北京网站建设网站建设
网站制作
类UrlReWriteModule的方法 网页设计
北京网站制作
北京网页设计
private void context_BeginRequest(object sender, EventArgs e){ 北京网站建设
//它是主要作用是根据请求匹配正则表达式来设置是否重写客户所请求的URL(它默认是重写URL),注意这句代码UrlHelper.SetEnableUrlReWriting(context,false); 企通互联
if(ConfigProvider.Instance().IsAggregateSite){ 北京网站制作
HttpContext context = ((HttpApplication)sender).Context; 网站建设
网站制作
string path = context.Request.Path.ToLower(); 企通互联
int iExtraStuff = path.IndexOf(".aspx"); 企通互联
if(iExtraStuff > -1 || path.IndexOf(".") == -1) { 北京网站制作
if(iExtraStuff > -1) 网站制作
{ 网页设计
path = path.Remove(iExtraStuff+5,path.Length - (iExtraStuff+5)); 北京网站设计
} 网站制作
网站建设
path = regexApplication.Replace(path,string.Empty,1,0); 网站制作
网页设计
if(path == "" || path == "/" || regexPath.IsMatch(path)) 北京网站建设
{ 北京网站建设
UrlHelper.SetEnableUrlReWriting(context,false); 北京网站建设
} 网页设计
北京网站建设
}else if(context.Request.Path.ToLower().IndexOf("services") > 0 && context.Request.Path.ToLower().IndexOf(".asmx") > 0 ) 北京网站设计
{ 企通互联
if(AlllowService(context)) 网站制作
{ 企通互联
if(context.Request.RequestType!="POST") 网站制作
{ 北京网站制作
string regexstr=@"/w+/services/"; 北京网站建设
string url=Regex.Replace(context.Request.RawUrl,regexstr,"/services/",RegexOptions.IgnoreCase); 网站设计
context.RewritePath(url); 网页设计
} 网站建设
//string fileName =context.Request; //System.IO.Path.GetFileName(context.Request.Path); 网站制作
//context.RewritePath("~/Services/" + fileName); 网页设计
}else{ 北京网站建设
context.Response.Clear(); 网页设计
context.Response.End(); 北京网站制作
} 网站建设
} 北京网站建设
北京网站设计
} 北京网页设计
网站设计
网站制作
网站制作
HttpModule处理完后(这句话并不正确,在这里是这样的)进入HttpHandler Factory,根据HttpHandler的配置内容我们可以马上找到这个类 网站建设
UrlReWriteHandlerFactory它是处理重写URL请求核心,在这里我详细分析下。 北京网站建设
它实现了IHttpHandlerFactory 网页设计
(看注释就知道这个类是很重要的了) 企通互联
企通互联
网站设计
HttpModule处理完后(这句话并不正确,在这里是这样的)进入HttpHandler Factory,根据HttpHandler的配置内容我们可以马上找到这个类 网站制作
UrlReWriteHandlerFactory它是处理重写URL请求核心,在这里我详细分析下。 网页设计
它实现了IHttpHandlerFactory 北京网站制作
(看注释就知道这个类是很重要的了) 北京网站制作
网站建设
using System; 网站设计
using System.Web; 网站制作
using System.Web.UI; 网站制作
using System.Text.RegularExpressions; 网页设计
北京网站设计
using Dottext.Framework; 北京网站建设
using Dottext.Framework.Components; 北京网站设计
using Dottext.Framework.Configuration; 网站建设
北京网页设计
namespace Dottext.Common.UrlManager 北京网站制作
{ 北京网站建设
/**//// <summary> 北京网站设计
/// Class responisble for figuring out which .Text page to load. By default will load an array of Dottext.UrlManager.HttpHanlder 北京网站制作
/// from the blog.config file. This contains a list of Regex patterns to match the current request to. It also allows caching of the 网页设计
/// Regex's and Types 北京网站设计
/// </summary> 网页设计
public class UrlReWriteHandlerFactory: IHttpHandlerFactory 北京网站设计网页设计
{ 北京网站设计
public UrlReWriteHandlerFactory(){} //Nothing to do in the cnstr 北京网页设计
//自定义虚方法从自定义配置节内容反序列化时构造Httphandler 北京网页设计
protected virtual HttpHandler[] GetHttpHandlers(HttpContext context) 企通互联
{ 网页设计
return HandlerConfiguration.Instance().HttpHandlers; 北京网站设计
} 网站设计
北京网页设计
/**//// <summary> 网站制作
/// Implementation of IHttpHandlerFactory. By default, it will load an array of HttpHanlder (Dottext.UrlManager.HttpHandler) from 网站制作
/// the blog.config. This can be changed, by overrideing the GetHttpHandlers(HttpContext context) method. 北京网站制作
/// </summary> 北京网站制作
/// <param name="context">Current HttpContext</param> 企通互联
/// <param name="requestType">Request Type (Passed along to other IHttpHandlerFactory's)</param> 北京网页设计
/// <param name="url">The current requested url. (Passed along to other IHttpHandlerFactory's)</param> 北京网站设计
/// <param name="path">The physical path of the current request. Is not gaurenteed to exist (Passed along to other IHttpHandlerFactory's)</param> 网页设计
/// <returns> 网站建设
/// Returns an Instance of IHttpHandler either by loading an instance of IHttpHandler or by returning an other 北京网站制作
/// IHttpHandlerFactory.GetHanlder(HttpContext context, string requestType, string url, string path) method 企通互联
/// </returns> 网站设计
//实现接口IHttpHandlerFactory定义的方法 网站建设
public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string path) 网站制作
{ 北京网站设计
//Get the Handlers to process. By defualt, we grab them from the blog.config 网站制作
HttpHandler[] items = GetHttpHandlers(context); 北京网页设计
//Dottext.Framework.Logger.LogManager.Log("path",Dottext.Framework.Util.Globals.RemoveAppFromPath(context.Request.Path,context.Request.ApplicationPath)); 网站设计
//Do we have any? 北京网站建设
if(items != null) 网站设计
{ 北京网页设计
int count = items.Length; 网站建设
网站制作
for(int i = 0; i<count; i++) 北京网站建设
{ 北京网站设计
//We should use our own cached Regex. This should limit the number of Regex's created 网站制作
//and allows us to take advantage of RegexOptons.Compiled 企通互联
//逐个匹配所配置节中定义的请求类型 网站设计
if(items[i].IsMatch(Dottext.Framework.Util.Globals.RemoveAppFromPath(context.Request.Path,context.Request.ApplicationPath))) 北京网站制作
{ 企通互联
//注意这里是关键,注意返回的Httphandler实例 网站建设
//throw new Exception(); 北京网页设计
switch(items[i].HandlerType) 网站设计
{ 网站制作
case HandlerType.Page://默认是Page 北京网站建设
企通互联
return ProccessHandlerTypePage(items[i],context,requestType,url); 网站建设
case HandlerType.Direct: 网站制作
HandlerConfiguration.SetControls(context,items[i].BlogControls); 网站设计
return (IHttpHandler)items[i].Instance(); 网站设计
case HandlerType.Factory: 北京网页设计 北京网站制作
//Pass a long the request to a custom IHttpHandlerFactory 北京网页设计
return ((IHttpHandlerFactory)items[i].Instance()).GetHandler(context,requestType,url,path); 企通互联
default: 网站制作
throw new Exception("Invalid HandlerType: Unknown"); 网站建设
} 企通互联
} 北京网页设计
} 北京网站设计
} 北京网站设计
//If we do not find the page, just let ASP.NET take over 网站制作
return PageHandlerFactory.GetHandler(context,requestType,url, path); 北京网站建设
} 网站设计
北京网站建设
北京网站建设
private IHttpHandler ProccessHandlerTypePage(HttpHandler item, HttpContext context, string requestType, string url) 北京网站设计
{ 北京网站建设
string pagepath = item.FullPageLocation; 企通互联
if(pagepath == null) 北京网站设计
{ 网站建设企通互联
pagepath = HandlerConfiguration.Instance().FullPageLocation; 网站制作
} 网站建设
HandlerConfiguration.SetControls(context,item.BlogControls); 网站建设
IHttpHandler myhandler=PageParser.GetCompiledPageInstance(url,pagepath,context); 网站建设
return myhandler; 北京网站设计
} 网页设计
网站制作
北京网站建设
public virtual void ReleaseHandler(IHttpHandler handler) 企通互联
{ 北京网站设计
北京网站建设
} 网页设计
} 北京网页设计
} 网站设计
网站建设
要注意它是如何把自定义配置节中的内容拈合成httphandler的实例 网页设计
把这些理顺后对于理解.text的url重写就不难了.... 企通互联
企通互联
对上面若有理解不正解的欢迎高手指正 企通互联
北京网站制作
第一次拿到dottext时,开始让我比较觉得比较奇怪的是 北京网站制作
北京网站建设
一、以floerggyy注册后通过URL:http://x.x.x.x/floerggyy即可进入自己的 北京网页设计blog里 北京网站建设
(其实忘了以前常做下载页面download.aspx也不过是处理了HttpHandler的虚页面而已,可能是见在.Text兴奋的连这些基本常识都忘了^_^) 企通互联
网站制作
二、居然可以拿用户名做用户的唯一标识但在表里面没有找到做为用户名UserName唯一约束的东东(到现在还不清楚在数据库哪个地方设置的,有知道的请指点下) 北京网页设计
后来通过重得注册同一用户名查看抛出的异常信息,确认确实在有UserName做为唯一约束的东东。 网页设计
唉,看来我对数据库一无所知。 北京网页设计
北京网站设计
网站制作
北京网站制作
...后来决定专写一篇关于 网站制作URL重写的文章,后来看到dottext的原作者也简单介绍了下urlRewrite,于是这个想法就放弃了。 北京网站制作
后来又有一些朋友问dottext关于URL的问题,看来还是写吧 企通互联
企通互联
2、配置文件WebConfig.config简单浏览 北京网页设计
网页设计
自定义配置节内容: 北京网站设计
<configSections> 网页设计
<section name="BlogConfigurationSettings" type="Dottext.Framework.Util.XmlSerializerSectionHandler, Dottext.Framework" /> 北京网站制作
<section name="HandlerConfiguration" type="Dottext.Framework.Util.XmlSerializerSectionHandler, Dottext.Framework" /> 网站设计
<section name="SearchConfiguration" type="Dottext.Framework.Util.XmlSerializerSectionHandler, Dottext.Framework" /> 网站设计
<section name="microsoft.web.services" type="Microsoft.Web.Services.Configuration.WebServicesConfiguration, Microsoft.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 网站设计
<section name="codeHighlighter" type="ActiproSoftware.CodeHighlighter.CodeHighlighterConfigurationSectionHandler, ActiproSoftware.CodeHighlighter" /> 网站制作
</configSections> 北京网站设计
北京网站制作
HttpHandler的配置内容: 网站设计
<httpHandlers> 北京网页设计
<add verb="*" path="*.asmx" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 北京网页设计
validate="false" /> 企通互联网站建设
<add verb="*" path="Error.aspx" type="System.Web.UI.PageHandlerFactory" /> 北京网站制作
<add verb="*" path="*" type="Dottext.Common.UrlManager.UrlReWriteHandlerFactory,Dottext.Common" /> 网站制作
</httpHandlers> 北京网站制作
网站制作
HttpModule的配置内容: 北京网站建设
<httpModules> 网站设计
<add name="UrlReWriteModule" type="Dottext.Common.UrlManager.UrlReWriteModule, Dottext.Common" /> 北京网站设计
<add name="EventHttpModule" type="Dottext.Framework.ScheduledEvents.EventHttpModule, Dottext.Framework" /> 北京网站建设
</httpModules> 北京网站制作
北京网站制作
网站设计
网页设计
见到一个陌生的项目首先打开它的配置文件看看,这是我的习惯:) 网站设计
先看看一些重点的配置内容: 网站建设
网站建设
看完Web.config中的上述内容熟悉asp.net运行机制的朋友就明白,DotText代码的运行顺序。在这里我再简单重复下 北京网站制作
aspnet的内部运行机制(若有不熟悉的朋友请参阅<<ASP.NET FameWork深度历险>>这本书,它对做asp.net开发的朋友很有帮助): 网页设计
remote client Request---->IIS---->aspnet_isapi.dll-->aspnet_wp.exe-->HttpRuntime---> 北京网站设计
HttpModule--->HttpHandler Factory--->HttpHandler--->HttpHandler.ProcessRequest()-->Response client Request 网页设计
好了,题归正转,client Request首先是被HttpModule截获。当我们请求.text的URL:http://www.cnblogs.com/floerggyy/时,首先是 网站建设
Dottext.Common.UrlManager命名空间下类UrlReWriteModule的相关方法被调用。 网站建设
(为什么会被类UrlReWriteModule www.qitongnet.com截获远程请求呢?上面HttpModule配置节的内容不是标明了吗???^_^ 网站制作
明知故问,那么为Dottext.Framework.ScheduledEvents命名空间下的类EventHttpModule会不会截获远程请求?什么时候截获呢? 北京网站制作
当然是按先来后顺序了,中国的优良传统都忘了!!! 网页设计
(其实这样说也是不太准确的,这两个HttpModule确是按顺序执行的但在HttpModule里的一些事件中它们是交叉运行的,好了类EventHttpModule 网站设计
不在我们的计论范围内在下面的代码就不分析了,有对这块不明白的最好去看下上面推荐的那本书^_^) 企通互联
网页设计
3 、URL重写,部分代码分析(这块涉及到众多自定义配置节、HttpModule、HttpHandler的综合应用所以要理顺还是有点麻烦的,要有一小点分析别人代码的耐心。个人认为) 北京网站建设网站建设
网站制作
类UrlReWriteModule的方法 网页设计
北京网站制作
北京网页设计
private void context_BeginRequest(object sender, EventArgs e){ 北京网站建设
//它是主要作用是根据请求匹配正则表达式来设置是否重写客户所请求的URL(它默认是重写URL),注意这句代码UrlHelper.SetEnableUrlReWriting(context,false); 企通互联
if(ConfigProvider.Instance().IsAggregateSite){ 北京网站制作
HttpContext context = ((HttpApplication)sender).Context; 网站建设
网站制作
string path = context.Request.Path.ToLower(); 企通互联
int iExtraStuff = path.IndexOf(".aspx"); 企通互联
if(iExtraStuff > -1 || path.IndexOf(".") == -1) { 北京网站制作
if(iExtraStuff > -1) 网站制作
{ 网页设计
path = path.Remove(iExtraStuff+5,path.Length - (iExtraStuff+5)); 北京网站设计
} 网站制作
网站建设
path = regexApplication.Replace(path,string.Empty,1,0); 网站制作
网页设计
if(path == "" || path == "/" || regexPath.IsMatch(path)) 北京网站建设
{ 北京网站建设
UrlHelper.SetEnableUrlReWriting(context,false); 北京网站建设
} 网页设计
北京网站建设
}else if(context.Request.Path.ToLower().IndexOf("services") > 0 && context.Request.Path.ToLower().IndexOf(".asmx") > 0 ) 北京网站设计
{ 企通互联
if(AlllowService(context)) 网站制作
{ 企通互联
if(context.Request.RequestType!="POST") 网站制作
{ 北京网站制作
string regexstr=@"/w+/services/"; 北京网站建设
string url=Regex.Replace(context.Request.RawUrl,regexstr,"/services/",RegexOptions.IgnoreCase); 网站设计
context.RewritePath(url); 网页设计
} 网站建设
//string fileName =context.Request; //System.IO.Path.GetFileName(context.Request.Path); 网站制作
//context.RewritePath("~/Services/" + fileName); 网页设计
}else{ 北京网站建设
context.Response.Clear(); 网页设计
context.Response.End(); 北京网站制作
} 网站建设
} 北京网站建设
北京网站设计
} 北京网页设计
网站设计
网站制作
网站制作
HttpModule处理完后(这句话并不正确,在这里是这样的)进入HttpHandler Factory,根据HttpHandler的配置内容我们可以马上找到这个类 网站建设
UrlReWriteHandlerFactory它是处理重写URL请求核心,在这里我详细分析下。 北京网站建设
它实现了IHttpHandlerFactory 网页设计
(看注释就知道这个类是很重要的了) 企通互联
企通互联
网站设计
HttpModule处理完后(这句话并不正确,在这里是这样的)进入HttpHandler Factory,根据HttpHandler的配置内容我们可以马上找到这个类 网站制作
UrlReWriteHandlerFactory它是处理重写URL请求核心,在这里我详细分析下。 网页设计
它实现了IHttpHandlerFactory 北京网站制作
(看注释就知道这个类是很重要的了) 北京网站制作
网站建设
using System; 网站设计
using System.Web; 网站制作
using System.Web.UI; 网站制作
using System.Text.RegularExpressions; 网页设计
北京网站设计
using Dottext.Framework; 北京网站建设
using Dottext.Framework.Components; 北京网站设计
using Dottext.Framework.Configuration; 网站建设
北京网页设计
namespace Dottext.Common.UrlManager 北京网站制作
{ 北京网站建设
/**//// <summary> 北京网站设计
/// Class responisble for figuring out which .Text page to load. By default will load an array of Dottext.UrlManager.HttpHanlder 北京网站制作
/// from the blog.config file. This contains a list of Regex patterns to match the current request to. It also allows caching of the 网页设计
/// Regex's and Types 北京网站设计
/// </summary> 网页设计
public class UrlReWriteHandlerFactory: IHttpHandlerFactory 北京网站设计网页设计
{ 北京网站设计
public UrlReWriteHandlerFactory(){} //Nothing to do in the cnstr 北京网页设计
//自定义虚方法从自定义配置节内容反序列化时构造Httphandler 北京网页设计
protected virtual HttpHandler[] GetHttpHandlers(HttpContext context) 企通互联
{ 网页设计
return HandlerConfiguration.Instance().HttpHandlers; 北京网站设计
} 网站设计
北京网页设计
/**//// <summary> 网站制作
/// Implementation of IHttpHandlerFactory. By default, it will load an array of HttpHanlder (Dottext.UrlManager.HttpHandler) from 网站制作
/// the blog.config. This can be changed, by overrideing the GetHttpHandlers(HttpContext context) method. 北京网站制作
/// </summary> 北京网站制作
/// <param name="context">Current HttpContext</param> 企通互联
/// <param name="requestType">Request Type (Passed along to other IHttpHandlerFactory's)</param> 北京网页设计
/// <param name="url">The current requested url. (Passed along to other IHttpHandlerFactory's)</param> 北京网站设计
/// <param name="path">The physical path of the current request. Is not gaurenteed to exist (Passed along to other IHttpHandlerFactory's)</param> 网页设计
/// <returns> 网站建设
/// Returns an Instance of IHttpHandler either by loading an instance of IHttpHandler or by returning an other 北京网站制作
/// IHttpHandlerFactory.GetHanlder(HttpContext context, string requestType, string url, string path) method 企通互联
/// </returns> 网站设计
//实现接口IHttpHandlerFactory定义的方法 网站建设
public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string path) 网站制作
{ 北京网站设计
//Get the Handlers to process. By defualt, we grab them from the blog.config 网站制作
HttpHandler[] items = GetHttpHandlers(context); 北京网页设计
//Dottext.Framework.Logger.LogManager.Log("path",Dottext.Framework.Util.Globals.RemoveAppFromPath(context.Request.Path,context.Request.ApplicationPath)); 网站设计
//Do we have any? 北京网站建设
if(items != null) 网站设计
{ 北京网页设计
int count = items.Length; 网站建设
网站制作
for(int i = 0; i<count; i++) 北京网站建设
{ 北京网站设计
//We should use our own cached Regex. This should limit the number of Regex's created 网站制作
//and allows us to take advantage of RegexOptons.Compiled 企通互联
//逐个匹配所配置节中定义的请求类型 网站设计
if(items[i].IsMatch(Dottext.Framework.Util.Globals.RemoveAppFromPath(context.Request.Path,context.Request.ApplicationPath))) 北京网站制作
{ 企通互联
//注意这里是关键,注意返回的Httphandler实例 网站建设
//throw new Exception(); 北京网页设计
switch(items[i].HandlerType) 网站设计
{ 网站制作
case HandlerType.Page://默认是Page 北京网站建设
企通互联
return ProccessHandlerTypePage(items[i],context,requestType,url); 网站建设
case HandlerType.Direct: 网站制作
HandlerConfiguration.SetControls(context,items[i].BlogControls); 网站设计
return (IHttpHandler)items[i].Instance(); 网站设计
case HandlerType.Factory: 北京网页设计 北京网站制作
//Pass a long the request to a custom IHttpHandlerFactory 北京网页设计
return ((IHttpHandlerFactory)items[i].Instance()).GetHandler(context,requestType,url,path); 企通互联
default: 网站制作
throw new Exception("Invalid HandlerType: Unknown"); 网站建设
} 企通互联
} 北京网页设计
} 北京网站设计
} 北京网站设计
//If we do not find the page, just let ASP.NET take over 网站制作
return PageHandlerFactory.GetHandler(context,requestType,url, path); 北京网站建设
} 网站设计
北京网站建设
北京网站建设
private IHttpHandler ProccessHandlerTypePage(HttpHandler item, HttpContext context, string requestType, string url) 北京网站设计
{ 北京网站建设
string pagepath = item.FullPageLocation; 企通互联
if(pagepath == null) 北京网站设计
{ 网站建设企通互联
pagepath = HandlerConfiguration.Instance().FullPageLocation; 网站制作
} 网站建设
HandlerConfiguration.SetControls(context,item.BlogControls); 网站建设
IHttpHandler myhandler=PageParser.GetCompiledPageInstance(url,pagepath,context); 网站建设
return myhandler; 北京网站设计
} 网页设计
网站制作
北京网站建设
public virtual void ReleaseHandler(IHttpHandler handler) 企通互联
{ 北京网站设计
北京网站建设
} 网页设计
} 北京网页设计
} 网站设计
网站建设
要注意它是如何把自定义配置节中的内容拈合成httphandler的实例 网页设计
把这些理顺后对于理解.text的url重写就不难了.... 企通互联
企通互联
对上面若有理解不正解的欢迎高手指正 企通互联
上一篇:网页设计利用 ASP.NET 的内置功能抵御 Web 攻击
下一篇:网站建设ASP.NET中为DataGrid添加合计字段