Можно сопоставить новое расширение файла с существующим обработчиком в ASP.NET? - PullRequest
2 голосов
/ 19 мая 2010

У меня есть сценарий, в котором мое приложение будет публиковать сервисы, используемые как на ПК, так и на мобильных устройствах, и у меня есть HTTPModule, который я хочу выполнять только для мобильных запросов. Поэтому я подумал, что лучший способ сделать это - указать мобильные запросы на другое расширение файла, и HTTPModule решит обрабатывать его, только если запрос нацелен на это новое расширение.

Мне не нужен пользовательский HTTPHandler для нового расширения; Я хочу запрограммировать сервисы как обычный сервис .ASMX, просто с другим расширением.

Во-первых, я могу это сделать? Если да, то как мне сделать так, чтобы запросы к моему новому расширению обрабатывались так же, как запросы .ASMX?

Во-вторых, это правильный подход? Собираюсь ли я разделять запросы на мобильные и ПК и управлять ими неправильно?

Спасибо, Dave

1 Ответ

2 голосов
/ 19 мая 2010

Да, можно зарегистрировать пользовательское расширение файла и заставить его работать с существующей средой выполнения .NET. Вы можете выполнить следующие шаги.

Вам необходимо добавить ScriptMap в IIS (при условии, что IIS 7) и указать его во время выполнения ASP.NET, чтобы IIS мог перенаправить запрос на правильный процессор.

  1. В IIS7 зайдите на свой сайт или в корень IIS для регистрации на уровне сервера
  2. В группе IIS перейдите к сопоставлениям обработчиков
  3. В разделе Действия нажмите Добавить карту сценариев
  4. Установить путь запроса на * .xxxx
  5. Укажите путь к среде выполнения ASP.NET (% windir% \ Microsoft.NET \ Framework64 \ v2.0.50727 \ aspnet_isapi.dll) или любой другой версии, которую вы используете.

Затем вам нужно будет зарегистрировать пользовательский поставщик сборки для расширения файла, чтобы среда выполнения .NET могла предварительно скомпилировать ваш код, предполагая, что вы хотите, чтобы он работал аналогично * .asmx.

Вот список некоторых встроенных поставщиков сборки:

<system.web>
    <compilation>
        <buildProviders>
           <add extension=".aspx" type="System.Web.Compilation.PageBuildProvider" />
           <add extension=".ascx" type="System.Web.Compilation.UserControlBuildProvider" />
           <add extension=".master" type="System.Web.Compilation.MasterPageBuildProvider" />
           <add extension=".asix" type="System.Web.Compilation.ImageGeneratorBuildProvider" />
           <add extension=".asmx" type="System.Web.Compilation.WebServiceBuildProvider" />
           <add extension=".ashx" type="System.Web.Compilation.WebHandlerBuildProvider" />
           <add extension=".soap" type="System.Web.Compilation.WebServiceBuildProvider" />
           <add extension=".resx" type="System.Web.Compilation.ResXBuildProvider" />
           <add extension=".resources" type="System.Web.Compilation.ResourcesBuildProvider" />
           <add extension=".wsdl" type="System.Web.Compilation.WsdlBuildProvider" />
           <add extension=".xsd" type="System.Web.Compilation.XsdBuildProvider"/>
           <add extension=".js" type="System.Web.Compilation.ForceCopyBuildProvider" />
        </buildProviders>
    </compilation>
</system.web>

Скорее всего, вы можете просто скопировать одного из существующих поставщиков сборок на основе того, который лучше всего соответствует вашим действиям, и зарегистрировать его в своих приложениях. Web.config

<system.web>
    <compilation>
        <buildProviders>
           <add extension=".xxxx" type="System.Web.Compilation.WebServiceBuildProvider" />
        </buildProviders>
    </compilation>
</system.web>
...