2009-10-12 24 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

相關問題