2010-04-29 4 views
2

Я хочу написать HttpHandler для перенаправления трафика на различные веб-страницы на сервере. Пользователь будет ввести в http://www.thisissupposedtoberedirected.com/site12 и должны быть перенаправлены на сайт, соответствующий ему, в данном примере сайта версии 1.2HttpHandler Redirect

Я знаю, как программировать на ASP.NET и C#, но я, кажется, не захватить более тонкие детали о сайте управление.
Как я могу это сделать? Что делать в web.config? Я читал это msdn page, но это не очень помогает.

ответ

5

HttpHandlers на самом деле довольно простые компоненты.

Во-первых, вам нужно создать класс, который наследует либо IHttpHandler, либо IHttpAsyncHandler (для вашего использования я предлагаю IHttpHandler, так как на самом деле не выполняется тяжелый подъем).

Затем вы скомпилируете DLL и опустите его в папку bin вашего веб-приложения.

Теперь сложная часть. Развертывание HttpHandlers в файле web.config сложно, поскольку он отличается от IIS6, IIS7 Integrated Mode и IIS7 Classic Mode. Самое лучшее место, чтобы смотреть это 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

+0

Знаете ли вы, какой уровень доверия мне нужен для IIS для выполнения этой задачи? –

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-адреса, вы будете сопоставлены с обработчиком, который вы создали, вместо обычного обработчика страниц ASP.NET ,

Кроме того, для вашей конкретной проблемы я бы не рекомендовал писать HttpHandler - я бы просто сделал DNS-перенаправление или выполнил некоторый поиск в вашем коде OnInit, чтобы проверить URL-адрес хоста, и если он указан в вашем DB, вы перенаправляете себя на основе данных конфигурации.

+0

@Tejs - Будьте осторожны, ваш пример работает только для IIS6.Классический режим IIS7 требует дополнительной записи в другом разделе, а интегрированный режим IIS7 использует другой раздел для HttpHandlers вместе (без учета раздела httpHandlers все вместе). –

+0

Хорошая точка - мне не повезло, и все, что я использую, - это IIS6 =/ – Tejs

Смежные вопросы