我想写一个HttpHandler重定向流量到服务器上的各种网页。用户将键入http://www.thisissupposedtoberedirected.com/site12,并应被重定向至适当的站点,在本例中为站点版本1.2
我知道如何用ASP.NET和C#编程,但我似乎不太了解网站管理的细节。
我怎样才能做到这一点呢?我应该在web.config中做些什么?我读过这篇msdn page,但帮助不大。
发布于 2010-04-29 22:06:33
HttpHandlers实际上是相当简单的组件。
首先,您需要创建一个继承IHttpHandler或IHttpAsyncHandler的类(对于您的使用,我建议使用IHttpHandler,因为实际上并没有完成繁重的工作)。
然后编译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。
发布于 2010-04-29 22:05:12
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时,您将被映射到您创建的处理程序,而不是普通的ASP.NET页面处理程序。
此外,对于您的特定问题,我不建议编写HttpHandler -我只会做一个DNS重定向,或者在您的OnInit代码中做一些查找来检查主机Url,如果它是在您的数据库中指定的,您可以根据配置数据自己进行重定向。
https://stackoverflow.com/questions/2737886
复制相似问题