2010-04-29 65 views
2

我想寫一個HttpHandler將流量重定向到服務器上的各種網頁。 用戶將在http://www.thisissupposedtoberedirected.com/site12的類型,應該被重定向到此時,相應的網站,在這個例子網站1.2版HttpHandler重定向

我知道如何在ASP.NET和C#編程,但我似乎不搶約網站更精細的細節管理。
我該如何設法完成這項工作?我應該怎麼做在web.config?我讀過這msdn page但它沒有太大的幫助。

回答

5

HttpHandlers實際上相當簡單的組件。

首先,您需要創建一個繼承IHttpHandlerIHttpAsyncHandler的類(供您使用,由於沒有完成繁重的工作,我建議使用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

+1適用於不同的配置。 – Tejs 2010-04-29 14:35:38

+0

您是否知道我需要IIS來完成此任務的信任級別? – 2010-05-06 10:39:21

0

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,您可以根據配置數據自行重定向。

+0

@Tejs - 請小心,您的示例僅適用於IIS6。IIS7經典模式需要在另一節中添加一個條目,並且IIS7集成模式將HttpHandler的另一節一起使用(忽略所有httpHandlers節)。 – 2010-04-29 14:12:03

+0

好點 - 我很不幸,而且我所能使用的IIS6 =/ – Tejs 2010-04-29 14:34:53