2014-07-16 16 views
17

Sto provando a creare un'applicazione web a pagina singola che combina sia ASP.NET WebAPI che il generatore Angluarjs di Yeoman. Attualmente ho una struttura di progetto di cui qui di seguitoCome modificare il percorso root di un'applicazione WebAPI ASP.Net?

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

Quando voglio costruire la distribuzione app, copio la cartella dist nel yeomanAngularApp nel WebApiApp sostituire la cartella dist in là.

Ora questo è tutto molto facile da fare. Quello che voglio veramente fare è dire al WebApiApp di non usare WebApiApp\ come root del progetto, ma usare WebApiApp\dist. Ciò significa che invece di andare a http://localhost/dist/index.html, potrei andare a http://localhost/index.html anche se index.html è nella cartella dist. Oltre a questo mi piacerebbe anche che il mio routing WebAPI per i controller di giocare anche bene.

Ho cercato per un po 'e non riesco a trovare una risposta. Il meglio che riesco a trovare, sta usando la riscrittura degli URL, che per me non mi sembra giusto.

+0

dipende da come stai servendo la tua applicazione. stai usando iis? –

+0

@ rik.vanmechelen sì. Sto servendo l'applicazione utilizzando IIS –

risposta

24

La riscrittura dell'URL è esattamente ciò che si desidera, con un blocco condizione per verificare se il file esiste. Il contenuto della directory dist è statico (ovvero, vive sul file system) ma i percorsi WebApiApp sono dinamici. Quindi è sufficiente testare se la rotta corrisponde a un file esistente nella directory dist oppure no, se non è sufficiente che .NET gestisca la rotta. L'aggiunta dei seguenti al file Web.config all'interno della sezione <system.webServer> dovrebbe fare il trucco:

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

La seconda regola è facoltativo ma significa una richiesta di radice del vostro sito sarà ancora servire il file index.html dalla directory dist, efficacemente facendo la radice del progetto WebApiApp\dist ma continuando a consentire tutti i routing WebAPI.

+0

Wow Seb, che ha funzionato magnificamente, questa è un'ottima soluzione al problema! –

+0

Se voglio cambiare il mio url '/dist/admin/index.html' in '/ admin', come posso fare questo? –

Problemi correlati