Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpHandler重定向_C#_Asp.net_Redirect_Httphandler - Fatal编程技术网

C# HttpHandler重定向

C# HttpHandler重定向,c#,asp.net,redirect,httphandler,C#,Asp.net,Redirect,Httphandler,我想编写一个HttpHandler,将流量重定向到服务器上的各种网页。 用户将键入http://www.thisissupposedtoberedirected.com/site12并应重定向到适当的站点,在本例中为1.2版站点 我知道如何使用ASP.NET和C#编程,但我似乎没有掌握有关网站管理的更详细信息。 我怎样才能做到这一点?我应该在web.config中执行什么操作?我读过这篇文章,但没有多大帮助。1)您需要创建一个新类来实现IHttpHandler或iHttpAsynchHandle

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

我知道如何使用ASP.NET和C#编程,但我似乎没有掌握有关网站管理的更详细信息。
我怎样才能做到这一点?我应该在web.config中执行什么操作?我读过这篇文章,但没有多大帮助。

1)您需要创建一个新类来实现IHttpHandler或iHttpAsynchHandler(后者是在您非常熟悉管理自己的线程时)。在那里创建您的逻辑

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>

这是my web.config中的示例设置-您的可能略有不同

现在,您的HttpHandler应该注册,并且根据您在web.config中注册时提供的详细信息,当您请求某些URL时,您将被映射到您创建的处理程序,而不是普通的ASP.NET页面处理程序


此外,对于您的特定问题,我不建议编写HttpHandler—我只需执行DNS重定向,或在OnInit代码中执行一些查找以检查主机Url,如果它是在数据库中指定的Url,您可以根据配置数据自行执行重定向。

HttpHandler实际上是相当简单的组件

首先,您需要创建一个继承
IHttpHandler
IHttpAsyncHandler
的类(对于您的使用,我建议
IHttpHandler
,因为实际上没有什么繁重的工作要做)

然后编译DLL并将其放入web应用程序的bin文件夹中

现在是棘手的部分。在web.config文件中部署HttpHandler很棘手,因为IIS6、IIS7集成模式和IIS7经典模式不同。查看此MSDN页面的最佳位置:

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>
<configuration>
  <system.webServer>
    <handlers>
      <add name="SampleHandler" verb="*" 
        path="SampleHandler.new" 
        type="SampleHandler, SampleHandlerAssembly" 
        resourceType="Unspecified" />
    </handlers>
  <system.webServer>
</configuration>


@Tejs-小心,您的示例仅适用于IIS6。IIS7经典模式需要在另一个部分中添加一个条目,IIS7集成模式将另一个部分一起用于HttpHandlers(忽略HttpHandlers部分)。好的方面-我很不幸,我只能使用IIS6=/你知道IIS完成此任务所需的信任级别吗?