HttpModule、HttpHandler-“一般处理程序(.ashx)”与“ASP.NET 处理程序”

作者:vkvi 来源:ITPOW(原创) 日期:2017-1-11

在 Visual Studio 中新建 Web 项时,可以看到两个比较类似的东西,一个是“一般处理程序”与“ASP.NET 处理程序”,这两个有什么区别呢?

“一般处理程序(.ashx)”与“ASP.NET 处理程序”有什么区别?

的确很像

因为它们都是继承自 IHttpHandler,初始代码也很相像。

从文件名来说

“一般处理程序(.ashx)”有两个文件,分别是 xxx.ashx、xxx.ashx.cs。

“ASP.NET 处理程序”只有一个文件,xxx.cs。

从使用上来说

“一般处理程序(.ashx)”更像 .aspx,它只是没有 HTML 布局文件,所以有其特殊的应用场景,比如做成投稿接口开放给第三方,当处理完投稿后,输出一个 XML 或 JSON 文本告诉其处理结果,而不是 HTML 文本。当然 .aspx 也能实现,用 Response.End() 提前结束,不让 HTML 输出来。不过 .ashx 更简洁。

“ASP.NET 处理程序”更像 ASP.NET 模块,需要在 web.config 中注册,注册时我们可以自由指定路径,比如明明不存在 get.do 这个文件,我们可以注册出来,当用户访问 http://xxx/get.do 的时候,实际上是交由我们的 ASP.NET 处理程序来执行的。

一般处理程序(.ashx) 示例

访问时就用 xxx.ashx 访问,可以看到会输出“Hello World”。

ASP.NET 处理程序示例

没完,上面代码注释中就特别提到,要在 web.config 中注册它。

访问时就用 get.do(同样,也是不区分大小写)访问,可以看到会输出“ITPOW”。

说明:handlers 中的 clear 非常关键,如果添加了这个,那么 .aspx 就不能访问了。所以如果要保证 .aspx 也能够访问,就不能 clear。

相关文章