Pytanie Jak zmienić ścieżkę główną aplikacji ASP.Net WebAPI?


Próbuję stworzyć pojedynczą stronę internetową, która łączy zarówno ASP.NET WebAPI, jak i generator Yeoman Angluarjs. Obecnie mam strukturę projektu przedstawioną poniżej

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

Kiedy chcę zbudować dystrybucję aplikacji, kopiuję plik dist folder w yeomanAngularApp do WebApiApp zastępowanie dist tam folder.

Teraz wszystko to jest bardzo łatwe. To, co naprawdę chcę zrobić, to powiedzieć WebApiApp nie do użytku WebApiApp\ jako główny element projektu, ale użyj WebApiApp\dist. Oznacza to zamiast iść http://localhost/dist/index.html, Mógłbym iść http://localhost/index.html nawet jeśli index.html jest w dist teczka. Ponadto chciałbym, aby moje trasowanie WebAPI dla kontrolerów również ładnie się odtwarzało.

Szukałem przez chwilę i nie mogę znaleźć odpowiedzi. Najlepsze, co mogę wymyślić, to używanie przepisywania adresów URL, co dla mnie nie jest właściwe.


18
2017-07-16 11:51


pochodzenie


zależy od tego, w jaki sposób obsługujesz aplikację. używasz iis? - rik.vanmechelen
@ rik.vanmechelen yep. Obsługuję aplikację przy użyciu usług IIS - James Toyer


Odpowiedzi:


Przepisywanie adresów URL jest dokładnie tym, czego potrzebujesz, z blokiem warunków do sprawdzenia, czy plik istnieje. Treść pod twoją dist katalog jest statyczny (tzn. żyje w systemie plików), ale plik WebApiApp Trasy są dynamiczne. Musisz po prostu sprawdzić, czy trasa pasuje do pliku istniejącego w dist katalog, czy nie, jeśli nie po prostu pozwól .NET obsłużyć trasę. Dodanie następujących elementów do Web.config plik w <system.webServer> sekcja powinna załatwić sprawę:

<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>

Druga zasada jest opcjonalna, ale oznacza, że ​​żądanie podania źródła głównego witryny będzie nadal obsługiwane index.html plik z dist katalog, skutecznie tworząc katalog główny projektu WebApiApp\dist ale nadal pozwala na wszystkie routing WebAPI.


24
2017-07-18 19:26



Wow Seb, który działał pięknie, jest to doskonałe rozwiązanie problemu! - Allen Rice
Jeśli chcę zmienić adres URL "/dist/admin/index.html" na "/ admin", jak mogę to zrobić? - Hardik Mandankaa