我想写一个HttpHandler来将流量重定向到服务器上的各种网页。
用户将键入http://www.thisissupposedtoberedirected.com/site12
,并应重定向到适当的站点,在此示例站点版本1.2中
我知道如何在ASP.NET和C#中编程,但我似乎没有抓住有关网站管理的更精细细节 我怎样才能完成这项工作?我该怎么做web.config?我已经阅读了这个msdn page,但它没有多大帮助。
答案 0 :(得分:6)
HttpHandlers实际上是相当简单的组件。
首先,您需要创建一个继承IHttpHandler
或IHttpAsyncHandler
的类(供您使用,我建议使用IHttpHandler
,因为实际上并没有进行繁重的工作。)< / p>
然后编译DLL并将其放在Web应用程序的bin文件夹中。
现在是棘手的部分。在web.config文件中部署HttpHandlers很棘手,因为它在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 :(得分: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 Page Handler。
此外,对于您的特定问题,我不建议编写HttpHandler - 我只是进行DNS重定向,或者在OnInit代码中执行一些查找以检查主机URL,以及是否在数据库中指定了主机URL ,您可以根据配置数据自行重定向。