本文不是从URL Rewrite的价值与意义而是从纯技术的内容出发,并结合了作者的经验,从应用角度来讲解这个话题。希望这系列文章的“旧事重提”不会让读者觉得沉闷,二是能让读者从中了解ASP.NET中URL Rewrite的方方面面。

之前觉得这个论题现已被谈滥了。URL Rewrite早现已被广阔开发人员所承受,网上关于URL Rewrite的组件和文章也层出不穷,可是总是让我感觉意犹未尽,所以终究仍是不由得提笔写了这系列文章。这些文章不会议论URL Rewrite的价值与含义,而只会议论纯技能的内容。文章中也不会有翔实地完成剖析,而是结合了我的经历,从运用视点来解说这个论题。您现已知道的,您还不知道的,别处现已讲过的,或许还没有讲过的,期望这系列文章的“旧事重提”不会让您觉得烦闷,而且能让您了解ASP.NET中URL Rewrite的方方面面。假如您今后再遇到URL Rewrite方面的问题是能够想到这几篇文章,估量我做梦也会笑作声来。

要充沛了解文章后边谈到的论题,咱们有必要简略的了解一下IIS与ASP.NET的通讯进程。我在这里解说的是IIS 6服务器。至于IIS 5和IIS 7,前者能够说现已被筛选了,而后者的“经典形式”与IIS 6可谓千篇一律,而新的“管道形式”其实是讲ASP.NET中的某些概念与IIS进行了深度集成。我信任,假如您了解了IIS 6和ASP.NET,在IIS 7的集成形式下也不会有任何问题。

首要咱们来看一幅简略的示意图,展现了IIS从收到Request开端,到回来Response整个进程中的几个首要过程:

ASP.NET中URL Rewrite的完成办法  URL Rewrite IIS ASP.NET .NET 第1张

1.IIS收到恳求;

2.挑选器依据URL的特色与IIS中的装备,挑选一个ISAPI用于处理该恳求——现在天然会挑选ASP.NET ISAPI;

3.ASP.NET履行引擎接收到恳求,所以初始化数据(例如构建各种方针);

4.开端触发各种Pipeline事情,天然先从BeginRequest开端;

5.通过了多个Pipeline事情,ASP.NET依据装备为当时恳求挑选一个适宜的Handler或HandlerFactory进行处理(当然特殊情况破例,例如现已在之前的事情中直接输出成果并完毕恳求了);

6.通过了Handler处理之后又通过几个Pipeline事情,以EndRequest完毕;

7.输出Response。

在一个ASP.NET运用中假如要进行URL Rewrite,那么一般便是在BeginRequest事情中调用HttpContext的RewritePath办法,将该恳求从头“定位”至一个方针URL。例如咱们就能够在Global.asax中重写Application_BeginRequest办法来完成这一点:

之所以在BeginRequest中进行Rewrite,是由于这个事情是在所有Pipeline事情中最早被触发的。在这时进行了从头“定位”之后,当时HttpContext中的一些特点也就发生了相应的改变(例如HttpContext.Request.Path)。这样,接下来的Pipeline事情的处理程序逻辑就会受到影响。例如在需求依据目录进行权限判别时,就会运用“定位”后的途径,而不是ASP.NET所收到的恳求。天然最“明显”的改变便是对Handler的挑选,例如上例,咱们把恳求从头定位至“CustomerList.aspx”文件,这样ASP.NET引擎就会挑选*.aspx所对应的System.Web.UI.PageHandlerFactory类对恳求进行处理。

public class Global : System.Web.HttpApplication
{
    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        HttpContext context = HttpContext.Current;
 
        if (context.Request.Path.Equals("/Customers",
            StringComparison.InvariantCultureIgnoreCase))
        {
            context.RewritePath("~/CustomerList.aspx");
        }
    }
}

***插句提外话,有两个概念需求区别开来,那便是“ASP.NET Pipeline”与“Web Forms”。两者都是ASP.NET里的重要模型,可是不同仍是非常大的:

◆ASP.NET Pipeline:作为每个ASP.NET运用所承受到的恳求来说,都会通过这个“管道”进行处理。这是一个ASP.NET等级的模型。

◆Web Forms:在ASP.NET Pipeline的履行进程中,其中有一个过程是挑选一个适宜的Handler(或HandlerFactory)来处理恳求。假如是aspx页面,ASP.NET就会挑选System.Web.UI.PageHandlerFactory类,在这个类中才终究构成了WebForms模型。

其实上面这句话的“构成”二字或许也不太切当。由于Web Forms或许应该是一个能够独立运用的履行引擎和模型,而System.Web.UI.PageHandlerFactory中也仅仅利用了这个模型罢了。咱们在编写ASP.NET运用时,完全能够依据咱们的需求,在其他当地运用这个模型。

【修改引荐】

  1. ASP.NET AJAX结构调用后台代码的根本办法
  2. ASP.NET验证码及图形编程技能详解
  3. ASP.NET MVC教程:创立TaskList运用程序
  4. ASP.NET MVC视频:AJAX
转载请说明出处
知优网 » ASP.NET中URL Rewrite的完成办法

发表评论

您需要后才能发表评论