axd与ashx区别
简单说明一下axd文件。axd文件实际上并不是在硬盘上存在的文件,而是HttpHandler的一种映射。在ASP.NET MVC中有很多内置的axd到ashx的映射。你可以在web.config中通过xxx.axd注册你自己的handler.其实扩展名为ashx与为axd基本上是一样的,都是用于写web handler,可以通过它来调用IHttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过程。
唯一不同的地方是:axd扩展名的必须要在web.config中的<httpHandlers>中进行注册,而ashx直接在项目中当成aspx那样添加使用即可。所以在项目的添加文件中,向导只有添加ashx文件的模板,而没有添加axd文件的模板。那微软为什么这么无聊搞两个后缀,全部使用ashx不就行了么?干脆利落。原来,如果你的web handler代码不在Web的项目中的话,也就是不在同一个dll中,那你就不能使用ashx了,因为如果不在web.config中注册的话,系统根本不知道要在那个dll库中才能找到相应的类来执行。所以,单纯的使用ashx的话,是无法使用第三方的带有IHttpHandler的类库的。
使用axd,就可以通过在web.config中注册来使用第三方的IhttpHandler.
如:
<add verb="*" path="OpenSearch.axd" type="Company.Components.HttpHandler.OpenSearchHandler, (命名空间.类名)Company.Extensions(.dll文件名)" validate="false"/>
只有注册了,web才知道OpenSearch.axd原来是在Company.Extensions.dll中,使用Company.Components.HttpHandler.OpenSearchHandler类处理。当然你搞个
<add verb="*" path="OpenSearch.ashx" type=.... 那也未免不可,习惯规范而已。
在ASP.NET Framework中有很多自带的很好用的IHttpHandler,比如说,web.config中的<trace>标签,就是通过IHttpHandler来获取request和response中的数据信息然后显示在请求的页面中,便于开发时的调试。在web.config中填写 <trace enabled="true" requestLimit="40" localOnly="false" pageOutput="true" />,然后你请求的页面上会自动加载上请求信息。