【问题标题】:HttpHandler RedirectHttpHandler 重定向
【发布时间】:2011-02-13 20:07:06
【问题描述】:

我想编写一个 HttpHandler 来将流量重定向到服务器上的各种网页。 用户将输入http://www.thisissupposedtoberedirected.com/site12 并应重定向到适当的站点,在此示例站点版本 1.2 中

我知道如何使用 ASP.NET 和 C# 进行编程,但我似乎没有掌握有关网站管理的更详细信息。
我怎样才能做到这一点?我应该在 web.config 中做什么?我已经阅读了这个msdn page,但这并没有多大帮助。

【问题讨论】:

    标签: c# asp.net redirect httphandler


    【解决方案1】:

    HttpHandlers 实际上是相当简单的组件。

    首先,您需要创建一个继承 IHttpHandlerIHttpAsyncHandler 的类(供您使用,我建议使用 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。

    【讨论】:

    • 您知道 IIS 完成这项任务需要什么级别的信任吗?
    【解决方案2】:

    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,如果它是在您的数据库中指定的,你根据配置数据自己做重定向。

    【讨论】:

    • @Tejs - 请注意,您的示例仅适用于 IIS6。 IIS7 经典模式需要在另一个部分中添加一个额外的条目,而 IIS7 集成模式将另一个部分一起用于 HttpHandlers(一起忽略 httpHandlers 部分)。
    • 好点 - 我很不幸,我只能使用 IIS6 =/
    猜你喜欢
    • 2011-09-25
    • 2012-09-11
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多