2017-06-21 3 views
0

Ich habe eine ASP.NET CORE App, die angular2 Routing verwendet. Laufende lokale Routen werden wie erwartet aufgelöst. Wenn ich auf dem Server (mit IIS 7) publiziere, scheinen die Routen das Ordnerverzeichnis hinzuzufügen, in dem ich es veröffentlicht habe. Im Beispiel unten ist die "Seiten-URL" die Seite, zu der ich navigiere, aber die "Ergebnis-URL" ist, was in der Browser-Adressleiste angezeigt wird.AngularJS 2 Routing auf IIS

Seite url ->http://myserver/orders

Ergebnis url ->http://myserver/orders/orders

Alle Ideen, warum dies geschieht? Ist dies eine IIS-Einstellung oder ein Angular-Routing-Problem oder ein .NET CORE-Konfigurationsproblem?

Hier ist die Art, wie ich meine Routen in angular2 konfiguriert habe.

export const appRoutes:Routes = [ 
{ path: 'orders', component: OrderSearchComponent, resolve: {orders: OrderSearchResolverService}}, 
{ path: 'orders/new', component: CreateOrderComponent}, 
{ path: 'orders/:id', component: OrderDetailComponent, canActivate: [OrderRouterActivator]}, 
{ path: '404', component: Error404Component}, 
{ path: '', redirectTo: 'orders', pathMatch: 'full'}, 
{ path: 'user', loadChildren: 'app/user/user.module#UserModule' } 
] 

Auf meinem dev Box ist der href gesetzt liegen diese:

<base href="/"> 

Das ist nicht auf IIS arbeiten, so habe ich ohne Glück viele verschiedene Einstellungen ausprobiert.

<base href=""> and <base href="/order/"> both return: 

http://myserver/orders/orders 

Irgendwelche Vorschläge?

Bearbeiten - um anzuzeigen, wo appRoutes verwendet wird.

@NgModule({ 
    ... 
imports: [ 
    BrowserModule, 
    FormsModule, 
    HttpModule, 
    RouterModule.forRoot(appRoutes) 
]... 
+0

Bitte zeigen Sie Ihre asp.net Core-Route-Konfiguration. Haben Sie in der Konfiguration eine Standardroute sowie eine "spa-fallback" Route angegeben, so dass nur 'index.html' /' index.cshtml' geladen wird? –

+0

Meine Konfiguration ist oben gezeigt. – Cooper

Antwort

0

Stellen Sie sicher, Ihre Startup.cs Routing-Konfigurationen für eine Standardroute sowie eine SPA Ausweichroute hat, der die index.cshtml oder gleichwertig für alle Routen anstatt zu versuchen, Vermögenswerte zu laden basierend auf Client-Seite Navigation dienen würde.

MapSpaFallbackRoute() erfordert Microsoft.AspNetCore.SpaServices in Ihrer Anwendung installiert werden.

Konfigurieren Sie Ihren Startup.cs wie folgt:

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 
     app.UseStaticFiles(); 

     app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 

      routes.MapSpaFallbackRoute(
       name: "spa-fallback", 
       defaults: new { controller = "Home", action = "Index" }); 
     }); 
    } 

Nach dem docs, wenn Sie mit IIS und nicht IIS Express Sie eine Rewrite-Regel erstellen müssen und haben Ihre Basis eingestellt, wie <base href="/src/" />. Die web.config Rewrite-Regel, die in dem Dokument enthalten sind, ist wie folgt:

<system.webServer> 
    <rewrite> 
    <rules> 
     <rule name="Angular Routes" stopProcessing="true"> 
     <match url=".*" /> 
     <conditions logicalGrouping="MatchAll"> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="/src/" /> 
     </rule> 
    </rules> 
    </rewrite> 
</system.webServer> 

Dieses umschreibt jede Anfrage wenn Sie Anrufe an einem API oder ähnlich zu durchlaufen Sie entsprechend die <match url="..." /> Eigenschaft zu ändern brauchen.

Hoffentlich diese Hilfe!