URL重写及ASP NET路由 Http处理模块 程序等

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

这段时间在学习ASP.NET路由、HTTP处理等内容,了解了一些,但又未完全弄懂,似是而非,不管如何,作一总结,供日后借鉴和修改。


一、IIS6和IIS7经典模式和集成模式

在IIS6及IIS7经典模式下,对ASP.NET的处理部分是独立出来的,靠aspnet_isapi.dll来处理完成。一个请求从浏览器发到IIS,IIS先判断请求的类型,如果是ASP.NET部分,就转发给aspnet_isapi.dll来处理,处理完了再返回给IIS,再由IIS返回到浏览器。


而在IIS7集成模式中,不管什么资源,什么类型,都在同一个管道中完成。

扫描二维码关注公众号,回复: 4052528 查看本文章



参考文章:

深入解读IIS 7中应用程序池的管道模式
http://tech.techweb.com.cn/redirect.php?fid=2&tid=496369&goto=nextnewset

Asp.Net生命周期和Http管道技术

http://www.cnblogs.com/refactor/archive/2012/07/06/2568742.html


也就是说,我写一个HTTP处理模块(module)、程序(handler),如果在IIS6和经典模式下,对静态页面之类的资源,是不起作用的,但IIS7的集成模式下,就可以。另外,如果我想写一个HTTP  Handler 来实现什么路由:

http://www.test.com/a.action/id/1 ==》http://www.test.com/a.aspx?id=1,则

在IIS6下,需要映射后缀名为.action的文件到aspnet_isapi.dll

在IIS7经典模式下,需要在web.config中注册和声明

在IIS7集成模式下,最简单,仅需少许配置

app_code/myhandler.cs

/// <summary>/// handler 的摘要说明/// </summary>public class MyHandler : IHttpHandler{    public void ProcessRequest(HttpContext context)    {        context.Response.Write("<H1>Hello, I'm an HTTP handler</H1>");        //HttpRequest request = context.Request;        //context.Response.Redirect("/default2.aspx");    }    public bool IsReusable    {        get        {            return false;        }    }}

IIS7经典模式下的web.config

<!--  有关如何配置 ASP.NET 应用程序的详细信息,请访问  http://go.microsoft.com/fwlink/?LinkId=169433  --><configuration>  <system.web>    <httpHandlers>      <add verb="*" path="*.action"         type="MyHandler" />    </httpHandlers>  </system.web>  <system.webServer>      <handlers>        <add name="MyHandler" verb="*" path="*.action"           modules="IsapiModule"           scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll"          resourceType="Unspecified" />      </handlers>  </system.webServer></configuration>

IIS7集成模式下

<?xml version="1.0"?><!--  有关如何配置 ASP.NET 应用程序的详细信息,请访问  http://go.microsoft.com/fwlink/?LinkId=169433  --><configuration>  <system.webServer>      <handlers>          <add name="SampleHandler" verb="*"            path="*.action"            type="MyHandler"            resourceType="Unspecified" />      </handlers>  </system.webServer></configuration>

参考文章:

HTTP 处理程序和 HTTP 模块概述

http://msdn.microsoft.com/zh-cn/library/bb398986(v=vs.100).aspx

二、ASP.NET路由

路由不是MVC特有的功能,WEB FORM程序也完全可以采用。问题是,IIS6和IIS7经典模式下,因为上述原因,路径中一定要加后缀名,比如http://www.test.com/a.aspx/id/1,

否则不起作用,URL的优美、友好性不免打上折扣。


还有一个问题,就是采用路由之后,如何读取参数。

习惯了传统URL下,QueryString的方式。但采用路由,是不能像常见的URL重写那样,将参数附在目标页面后面比如

        routes.MapPageRoute("productinfo",            "pid.ashx/{id}",            "~/handler.ashx?pid=");

我曾经以为可以将这个{id},附在目标地址后面,写成这个样子,hanler.ashx?pid=$1,结果没门。

参数是怎么提取的呢?是在目标页面里,用 Page.RouteData.Values["..."]的方式提取。并且这个页面要是aspx页面,ashx还不行。

ASP.NET 路由

http://msdn.microsoft.com/zh-cn/library/cc668201(v=vs.100).aspx


三、URL重写过时了吗

又有路由,又有自定义的HTTP处理模块、程序,还要URL重写干嘛?微软有一个给IIS7的重写模块外,其他都是杂牌军,总有点怪怪的感觉。

(详见拙作http://blog.csdn.net/leftfist/article/details/9283141

但是,对于IIS6和IIS7经典模式来讲,URL重写可以处理静态资源类地址,证明在IIS处理过程中,先于ASP.NET一步,我相信它的性能要比路由和自定义HTTP处理要高。并且各种正则表达式,复杂是复杂了一点,但毕竟能实现得相当好。






这些不同WEB服务器下的特点,是我们想实现优美、友好的URL所要考虑的。





           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/hddfuuh/article/details/84024709