2009-10-12 45 views
2

我在我的项目中添加了一个通用处理程序(ashx),但我无法在web.config中看到它的注册并且它可以工作。怎么来的 ?我的意思是不应该Visual Studio将它添加为web.config中的http处理程序?或者是因为我没有覆盖任何预定义的处理程序,而是我专门调用它。Web.Config中的通用处理程序注册

回答

6

通常,Asp.net中的通用处理程序是为支持一些小任务而设计的,例如创建一些不需要Asp.net进程的缩略图。所以,你可以把它称为一个简单的asp.net页面,如“www.somesite.com/Thumbnail.ashx?filename=abc.jpg”。

顺便说一下,如果你想映射这个处理程序与一些URL像下面的URL。

  • www.somesite.com/Thumbnail/abc.jpg
  • www.somesite.com/Thumbnail/dog.jpg
  • www.somesite.com/Thumbnail/cat.jpg

您需要使用一些URL路由,如Web表单路由(基于System.Routing)来映射它。所以,你可以使用下面的代码来完成上面的例子。

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.Map("Thumbnail", "Thumbnail/{filename}").To("~/Thumbnail.ashx"); 
} 

有关Web Form映射的更多信息,请参阅Phil Haack的Using Routing With Web Forms

但是,如果您需要创建一些Http处理程序,它可以处理您的应用程序的某些指定文件类型,如JavaScript文件处理程序。您必须创建从IHttpHandler继承的类。之后,您必须在web.config文件中注册它,以获取由此处理程序处理的指定文件类型。请看HTTP Handlers and HTTP Modules in ASP.NET Mansoor Ahmed Siddiqui

PS。如果使用通用处理程序在web.config文件中注册,则需要创建2个文件,分别是SomeHandler.ashx和SomeHandler.ashx.cs。创建一些简单的文件处理程序相当复杂。另一方面,您只能创建一个继承自IHttpHandler类的cs文件来完成同样的任务。

+0

谢谢,现在有道理。 – Tarik 2009-10-12 23:33:23

+0

好解释1 + ..... – 2009-10-13 09:45:48

1

处理程序只是您可以浏览到的另一种文件类型。 HTTP模块必须在web.config中注册,但不一定是处理程序。

+0

但是,如果我想覆盖整个项目的asp.net默认httphandlers,那么我需要在web.config中注册它吗? – Tarik 2009-10-12 22:55:54

+0

我不是100%确定你在问什么......你是否添加一个与内置处理程序具有相同名称的处理程序? – Jonas 2009-10-12 22:56:48

+0

或者你是否添加了一个旨在映射到通配符路径的处理程序? IE浏览器,任何请求* .foo应该被定向到你的处理程序? – Jonas 2009-10-12 22:57:22

1

我相信你可以截取每个HTTP请求思维的HTTP模块代替HTTP处理程序

HTTP模块的现场,并可以选择做一些操作在HTTP管道或完全拦截呼叫。模块必须在web.config

在另一方面,被注册的HttpHandler的工作几乎完全一样的ASPX页面,除了它是一个比较轻便,不处理你做的所有页面事件不需要诸如图像处理器之类的东西。

+0

感谢您的好答案,但实际上我并没有混淆Httphandler与httpModule我有点知道他们是什么。我问为什么我注册httphandler :)谢谢寿。 – Tarik 2009-10-13 05:32:38

相关问题