我想寫一個HttpHandler將流量重定向到服務器上的各種網頁。 用戶將在http://www.thisissupposedtoberedirected.com/site12
的類型,應該被重定向到此時,相應的網站,在這個例子網站1.2版HttpHandler重定向
我知道如何在ASP.NET和C#編程,但我似乎不搶約網站更精細的細節管理。
我該如何設法完成這項工作?我應該怎麼做在web.config?我讀過這msdn page但它沒有太大的幫助。
我想寫一個HttpHandler將流量重定向到服務器上的各種網頁。 用戶將在http://www.thisissupposedtoberedirected.com/site12
的類型,應該被重定向到此時,相應的網站,在這個例子網站1.2版HttpHandler重定向
我知道如何在ASP.NET和C#編程,但我似乎不搶約網站更精細的細節管理。
我該如何設法完成這項工作?我應該怎麼做在web.config?我讀過這msdn page但它沒有太大的幫助。
HttpHandlers實際上相當簡單的組件。
首先,您需要創建一個繼承IHttpHandler
或IHttpAsyncHandler
的類(供您使用,由於沒有完成繁重的工作,我建議使用IHttpHandler
)。
然後編譯該DLL並將其放到Web應用程序的bin文件夾中。
現在棘手的部分。在web.config文件中部署HttpHandler非常棘手,因爲它在IIS6,IIS7集成模式和IIS7經典模式之間不同。尋找最好的地方是這個MSDN網頁:
How to: Register HTTP Handlers
IIS6
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="SampleHandler.new"
type="SampleHandler, SampleHandlerAssembly" />
</httpHandlers>
<system.web>
</configuration>
IIS7經典模式
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="SampleHandler.new"
type="SampleHandler, SampleHandlerAssembly" />
</httpHandlers>
<system.web>
<system.webServer>
<add name=SampleHandler" verb="*" path="SampleHandler.new"
Modules="IsapiModule"
scriptProcessor="FrameworkPath\aspnet_isapi.dll"
resourceType="File" />
</system.webServer>
</configuration>
IIS7集成模式
<configuration>
<system.webServer>
<handlers>
<add name="SampleHandler" verb="*"
path="SampleHandler.new"
type="SampleHandler, SampleHandlerAssembly"
resourceType="Unspecified" />
</handlers>
<system.webServer>
</configuration>
正如您所看到的,每個IIS配置都需要web.config文件稍微不同的部分中的條目。我的建議是在每個位置添加條目,以便IIS配置更改不會破壞您的HttpHandler。
1)您需要創建一個實現IHttpHandler或IHttpAsyncHandler的新類(後者是當您非常適合管理自己的線程時)。在那裏創建你的邏輯。
2)然後,修改web.config讓您註冊處理程序:
<system.web>
<httpHandlers>
<add verb="*" path="*.htm" type="System.Web.StaticFileHandler"/>
<add verb="*" path="*.html" type="System.Web.StaticFileHandler"/>
<add verb="*" path="*.ico" type="System.Web.StaticFileHandler"/>
</httpHandlers>
</system.web>
這是我的web.config樣本設置 - 你可能略有不同。
現在,您的HttpHandler應該被註冊,並且基於您在web.config中註冊時提供的詳細信息,當您請求某些URL時,您將映射到您創建的Handler而不是常規的ASP.NET頁面處理程序。
此外,對於您的特定問題,我不建議編寫HttpHandler - 我只是做一個DNS重定向,或者在您的OnInit代碼中執行一些查找以檢查主機URL,並且如果它是您的DB,您可以根據配置數據自行重定向。
@Tejs - 請小心,您的示例僅適用於IIS6。IIS7經典模式需要在另一節中添加一個條目,並且IIS7集成模式將HttpHandler的另一節一起使用(忽略所有httpHandlers節)。 – 2010-04-29 14:12:03
好點 - 我很不幸,而且我所能使用的IIS6 =/ – Tejs 2010-04-29 14:34:53
+1適用於不同的配置。 – Tejs 2010-04-29 14:35:38
您是否知道我需要IIS來完成此任務的信任級別? – 2010-05-06 10:39:21