Подтвердить что ты не робот

Как изменить корневой путь приложения ASP.Net WebAPI?

Я пытаюсь создать одностраничное веб-приложение, объединяющее ASP.NET WebAPI и генератор Yeoman Angluarjs. В настоящее время у меня есть структура проекта, изложенная ниже

|-- yeomanAngularApp |-- app |-- dist |-- scripts |-- index.html |-- etc... |-- WebApiApp |-- App_Start |-- bin |-- Content |-- Controllers |-- Models |-- WebApiApp.csproj |-- dist |-- scripts |-- index.html

Когда я хочу создать дистрибутив приложения, я скопирую папку dist в yeomanAngularApp в WebApiApp, заменив там папку dist.

Теперь это очень легко сделать. Я действительно хочу сказать, что WebApiApp не использовать WebApiApp\ в качестве корня проекта, а использовать WebApiApp\dist. Это означает, что вместо перехода на http://localhost/dist/index.html я мог бы перейти на http://localhost/index.html, хотя index.html находится в папке dist. Кроме того, мне также хотелось бы, чтобы моя маршрутизация WebAPI для контроллеров также играла хорошо.

Я искал какое-то время, и я не могу найти ответ. Лучшее, что я могу придумать, использует переписывание URL, что для меня не так уж и хорошо.

4b9b3361

Ответ 1

Переписывание URL именно то, что вы хотите, с блоком условий, чтобы проверить, существует ли файл. Содержимое в вашем каталоге dist является статическим (т.е. живет в файловой системе), но маршруты WebApiApp являются динамическими. Поэтому вам просто нужно проверить, соответствует ли маршрут файлу, который существует в каталоге dist, или нет, если не просто позволить .NET обрабатывать маршрут. Добавление следующего в ваш файл Web.config в разделе <system.webServer> должно выполнить трюк:

<rewrite>
  <rules>
  <rule name="static dist files" stopProcessing="true">
    <match url="^(.+)$" />
    <conditions>
      <add input="{APPL_PHYSICAL_PATH}dist\{R:1}" matchType="IsFile" />
    </conditions>
    <action type="Rewrite" url="/dist/{R:1}" />
  </rule>
    <rule name="index.html as document root" stopProcessing="true">
      <match url="^$" />
      <action type="Rewrite" url="/dist/index.html" />
    </rule>
  </rules>
</rewrite>

Второе правило является необязательным, но это означает, что запрос для корня вашего сайта по-прежнему будет обслуживать файл index.html из каталога dist, эффективно создавая корень проекта WebApiApp\dist, но все же позволяя всю маршрутизацию WebAPI.