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

来源:转载

在 Visual Studio中新建 Web项时,可以看到两个比较类似的东西,一个是“一般处理程序”与“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)示例

public class Handler1 : IHttpHandler{ public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Write("Hello World"); } public bool IsReusable { get { return false; } }}

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

ASP.NET 处理程序示例

public class IISHandler1 : IHttpHandler{ /// <summary> /// 您将需要在网站的 Web.config 文件中配置此处理程序 /// 并向 IIS 注册它,然后才能使用它。有关详细信息, /// 请参见下面的链接: http://go.microsoft.com/?linkid=8101007 /// </summary> #region IHttpHandler Members public bool IsReusable { // 如果无法为其他请求重用托管处理程序,则返回 false。 // 如果按请求保留某些状态信息,则通常这将为 false。 get { return true; } } public void ProcessRequest(HttpContext context) { //在此处写入您的处理程序实现。 context.Response.Write("千一网络"); } #endregion}

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

<system.webServer> <handlers> <clear/> <add name="handler1" path="get.do" verb="GET,POST" type="命名空间.IISHandler1"/> </handlers></system.webServer>

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

分享给朋友:
您可能感兴趣的文章:
随机阅读: