2016-07-22 22 views
1

Ich versuche Routing mit .net Kern und Angular 2 einzurichten, aber die Routen nicht auflösen, weil sie vom Server gelöst werden.Angular 2 Routing mit ASP .Net Core (nicht-mvc)

Eine Lösung, die ich gesehen habe, ist eine Standardroute zu Ihrem Heim-Controller oder etwas zu registrieren ... aber ich habe keine MVC-Controller.

Ich habe diese auf meine Hauptkomponente hinzugefügt (und getan alle anderen Router Voraussetzungen)

@RouteConfig([ 
    { path: '/', name: 'Table', component: TableComp, useAsDefault: true }, 
    { path: '/login', name: 'Login', component: LoginComp } 
]) 

Und ich habe zu tun dies in startup.cs:

innerhalb ConfigureServices()

services.AddMvc(); 

innerhalb Configure()

app.UseMvc(); 

Da ich aber keine MVC-Controller verwende oder MVC-Routen registriere, weiß ich nicht, wie ich meine Winkelrouten im Browser und nicht auf dem Server auflösen kann und warum sie nicht einfach sind macht die Sache ...

+0

Ich empfehle die Verwendung eines einzigen MVC-Controllers, um eine einzelne Index.cshtml-Ansicht zu bedienen. Dies ermöglicht es Ihnen, die Vorteile von asp.net in Routing-und Tag-Helfer zu nutzen. –

Antwort

10

folgende Konfiguration sollte die meisten Projekte passen mit Client-Seite Routing in .NET Kern:

DefaultFilesOptions options = new DefaultFilesOptions(); 
options.DefaultFileNames.Clear(); 
options.DefaultFileNames.Add("index.html"); 

app.Use(async (context, next) => 
{ 
    await next(); 

    if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value)) 
    { 
     context.Request.Path = "/index.html"; 
     await next(); 
    } 
}) 
.UseCors("AllowAll") 
.UseMvc() 
.UseDefaultFiles(options) 
.UseStaticFiles(); 
+0

Würde dies zur RouteConfig hinzugefügt oder so? Oder zu welcher Datei würde ich das hinzufügen? – Brett

+0

Getestet und funktioniert. Dies funktioniert auch ohne UseCors und UseMvc. – Gyocol

+0

@Brett das sollte in de Startup.Configure Methodenvariable App hinzugefügt werden, ist der IApplicationBuilder – Gyocol

1

Sie suchen die Microsoft.AspNetCore.SpaServices in this gitHub Repo gefunden. Suchen Sie nach diesem example.

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" }); 
}); 

Es gibt eine older post hier mit einigen früheren Versionen, aber das Setup sollte sehr ähnlich sein.

0

Versuchen Sie diese example Asp Core + Angular2 + Swashbuckle + Docker.

Es verwendet UseMvc() für C# API-Controller. Und UseStaticFiles() AngularJs (und anderen statischen) Dateien dienen.

Sie betreiben Asp Core Backend als Service. Mit Webpack können Sie AngularJs-Anwendungen aus Typescript-Quellcode erstellen. Es wird veröffentlicht public Ordner Backend sieht Statik aus zu dienen.

0

Ich lege index.html in wwwroot und benutze DefaultFiles() auf der Startseite. Der Webserver kennt und findet die Standarddatei - index.html automatisch.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 

     app.UseDefaultFiles(); 
     app.UseStaticFiles(); 

     app.UseMvc(); 
    }