установить базовый путь в IISExpress и webapi в ASP.NET 5

Мне нужно, чтобы проект WebAPI работал с другим базовым путем, чем обычно. Я создал простой проект под Visual Studio, который использует WebAPI и ASP.NET 5.

Если для базового пути задано значение http://localhost:38170/, мой проект работает нормально, и я могу получать значения из тестового контроллера (http://localhost:38170/api/values). На этом этапе моя конфигурация IIS Express:

<site name="WebApi" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\WebApi\src\WebApi\wwwroot" />
   </application>
   <bindings>
        <binding protocol="http" bindingInformation="*:38170:localhost" />
   </bindings>
</site>

Я попытался изменить URL-адрес приложения в свойствах проекта, чтобы отразить мою потребность: http://localhost:38170/xxx

Теперь запуск проекта и нажатие http://localhost:38170/xxx/api/values приводит к 404. Попытка http://localhost:38170/api/values возвращает значения с контроллера, как будто ничего измененный. Я заметил, что изменения в Visual Studio никак не отражаются в конфигурации IIS Express (я не знаю, должны ли они быть ...).

Я пробовал изменить путь в IISExpress вручную, как в этом потоке: Создание виртуальных каталогов в IIS express .

<site name="WebApi" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/xxx" physicalPath="C:\WebApi\src\WebApi\wwwroot" />
   </application>
   <bindings>
        <binding protocol="http" bindingInformation="*:38170:localhost" />
   </bindings>
</site>

Результаты следующие:

http://localhost:38170/api/values - Ошибка 500.19 (ошибка конфигурации), и это справедливо хорошо - я не планирую, чтобы это сработало

http://localhost:38170/xxx/api/values - 502.3 - Плохой шлюз при попадании httpPlatformHandler

Я полагаю, что ошибка где-то в конфигурации httpPlatformHandler, но я не уверен, как это сделать в сочетании с IIS Express. Мой web.config:

<configuration>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
  </system.webServer>
</configuration>

Я пробовал случайные изменения, такие как изменение атрибута пути на xxx/*, но ничего не работает.

РЕДАКТИРОВАТЬ: чтобы прояснить вопрос.

Как настроить WebAPI на ASP.NET 5 (ASP.NET Core) на IISExpress с помощью httpPlatformHandler и Kestrel, чтобы установить базовый путь, отличный от корневого.


person pg0xC    schedule 04.02.2016    source источник
comment
Просто для проверки - попробуйте выйти / закрыть / перезапустить IISExpress (с помощью значка на панели инструментов). Есть сообщения о проблемах с IIS, как этот я случайно нажимаю. Не говорю, что это связано (я не знаю), так что просто проверка работоспособности (относительно того, почему изменения в свойствах VS, похоже, не устанавливаются)   -  person EdSF    schedule 04.02.2016
comment
@EdSF, к сожалению, проверил это сто один раз - результаты, как описано   -  person pg0xC    schedule 04.02.2016


Ответы (1)


Вы повредили файл, поскольку ваша модификация соблюдает правила конфигурации IIS Express.

Я предлагаю вам использовать умный инструмент, такой как Jexus Manager, для управления им, а затем вы можете синхронизировать проект Visual Studio с правильным URL-адресом.

Например, ожидается 404, поскольку для тега вашего приложения задан путь /, поэтому нет ни приложения, ни виртуального каталога для обслуживания xxx.

Ожидается, что 500.19 будет позже, поскольку при добавлении действительного виртуального каталога с именем xxx вы удалили корневой виртуальный каталог. Это совершенно неправильно, поскольку должен присутствовать корневой виртуальный каталог.

person Lex Li    schedule 05.02.2016
comment
так что ты предлагаешь делать? Jexus Manager умирает без предупреждения, так что это не вариант. Если должен присутствовать корневой виртуальный каталог, куда мне его указывать? - другого приложения там нет. Более того, похоже, что httpPlatformHandler работает и правильно обрабатывает запросы - я проверил журналы. Он просто получает плохие запросы от пустельги или вообще не получает запросов (я не уверен) - person pg0xC; 05.02.2016
comment
@ pg0xC, восстановите файл конфигурации до случая 404, а затем добавьте новый виртуальный каталог xxx. Корневой виртуальный каталог может указывать куда угодно (но не должен содержать web.config, чтобы не вводить другие настройки). - person Lex Li; 05.02.2016
comment
Почти готово. Ситуация немного изменилась - я получаю 404 на localhost: 38170 / xxx / api / values ​​, потому что мой маршрутизация по-прежнему хочет обслуживать url xxx / api / values. Api не работает, но это еще одна проблема. Спасибо @Lex Li - person pg0xC; 05.02.2016