2015-01-06 4 views
5

Ich habe eine ASP.NET MVC-App. Ich lerne ASP.NET vNext. Um dies zu tun, habe ich beschlossen, meine bestehende App auf vNext zu portieren. Die Sache, über die ich mir nicht sicher bin, ist, wie ich meine Routen überbrücken soll.Migrieren von ASP.NET MVC-Routen zu ASP.NET vNext

In meiner Herkunft ASP.NET MVC-app, ich habe folgendes:

RouteConfig.cs

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.RouteExistingFiles = true; 

    routes.MapRoute(
    name: "Index", 
    url: "", 
    defaults: new { controller = "Root", action = "Index" } 
); 

    routes.MapRoute(
    name: "Items", 
    url: "items/{resource}", 
    defaults: new { controller = "Root", action = "Items", resource = UrlParameter.Optional } 
); 

    routes.MapRoute(
    name: "BitcoinIntegration", 
    url: "items/available/today/{location}", 
    defaults: new { controller="Root", action="Availability", location=UrlParameter.Optional } 
); 

    routes.MapRoute(
    name: "BlogPost1", 
    url: "about/blog/the-title", 
    defaults: new { controller = "Root", action = "BlogPost1" } 
); 
} 

Jetzt in diesem ASP.NET vNext Welt, ich bin nicht sicher, wie man Setup-Routen. Ich habe folgendes:

Startup.cs

using Microsoft.AspNet.Builder; 
using Microsoft.AspNet.Routing; 
using Microsoft.Framework.DependencyInjection; 

namespace MyProject.Web 
{ 
    public class Startup 
    { 
     public void Configure(IApplicationBuilder app) 
     { 
      app.UseErrorPage(); 

      app.UseServices(services => 
      { 
       services.AddMvc(); 
      }); 

      app.UseMvc(routes => 
      { 
       routes.MapRoute("areaRoute", "{area:exists}/{controller}/{action}"); 
      }); 

      app.UseMvc(); 
      app.UseWelcomePage(); 
     } 
    } 
} 

Trotzdem bin ich nicht sicher, von zwei Dingen:

  1. Wie die Routen ich in RouteConfig.cs definiert hinzuzufügen zuvor .
  2. So verwenden Sie views/home/Index.cshtml als Standardpfad anstelle von app.UseWelcomePage().
+2

Was ist los mit 'app.UseMvc (Routen => RouteConfig.RegisterRoutes (Routen))'? Dies ist kein vNext-Unterschied, sondern nur regulärer MVC, außer dass Sie OWIN verwenden, um Ihre App zu starten, statt Ihre Routen explizit in Global.asax zu registrieren. Das Routing funktioniert genauso, du rufst einfach 'RegisterRoutes' von einem anderen Ort an. Wie bei Ihrem anderen Home/Index Problem, entfernen Sie einfach den Anruf zu 'UseWelcomePage' - Ihr Routing wird tun, was es sonst getan hätte. –

+0

@AntP - Gibt es in vNext einen "empfohlenen" Ansatz? Ich versuche, mit vNext so konsistent wie möglich zu sein, damit ich den richtigen Weg finde. Vielen Dank. –

+0

Sie müssen Ihre Routen immer noch in den Delegaten aufnehmen, den Sie an "UseMvc" übergeben - unabhängig davon, ob Sie "RouteConfig" aufrufen oder nicht.RegisterRoutes (routes) 'da drin oder einfach nur einen anonymen Delegaten zu deklarieren und dort den ganzen Routing-Code hinzuzufügen (wie in deinem aktuellen Beispiel) macht wirklich wenig Unterschied. Ich würde es wahrscheinlich in 'RouteConfig' behalten, nur um zu vermeiden, dass die' Configure'-Methode aufgebläht wird. Die vNext-Konvention würde lediglich vorschreiben, dass Sie OWIN verwenden, um Ihre Anwendung zu bootstrappen (anstatt die "Global.asax" -Ansatz zu verwenden), die Sie bereits machen. –

Antwort

4

Haftungsausschluss: Seit vNext ist noch in der Beta wird jede Stunde Churn unterziehen, der Code, den ich hier zeigen konnte schnell veralten, auch in der nächsten Minute oder die nächste Stunde! Wenn das passiert, bevor Sie für "dies funktioniert nicht" abstimmen, lassen Sie mich einen Kommentar und ich werde mein Bestes versuchen, um es auf das aktuelle Niveau zu bringen.

Registrierung von Routen: Es gibt wenige Änderungen, aber der Gesamtansatz bleibt gleich. Hier ist Ihre RouteConfig Refactoring:

RouteConfig.cs

using Microsoft.AspNet.Builder; 
using Microsoft.AspNet.Routing; 

public class RouteConfig 
{ 
    // instead of RouteCollection, use IRouteBuilder 
    public static void RegisterRoutes(IRouteBuilder routes) 
    { 
    // routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); -> gone 
    // routes.RouteExistingFiles = true; -> gone 

    routes.MapRoute(
     name: "Index", 
     template: "", 
     defaults: new { controller = "Root", action = "Index" } 
    ); 

    // instead of UrlParameter.Optional, you use the ? in the template to indicate an optional parameter 
    routes.MapRoute(
     name: "Items", 
     template: "items/{resource?}", 
     defaults: new { controller = "Root", action = "Items" } 
    ); 

    ... // ignored for brevity (since their registration is along the same lines as the above two). 
    } 
} 

Startup.cs

public void Configure(IApplicationBuilder app) 
{ 
    // ... other startup code 

    app.UseMvc(RouteConfig.RegisterRoutes); 

    // ... other startup code 
} 

Hinweis: Sie können sehr gut inline die Strecke Anmeldung hier, aber ich ziehe es in einer separaten Datei zu De-Clutter Startup.cs

Um zu zeigen, UseWelcomePage zu einem Ihrer eigenen, sehen Sie sich die verschiedenen Überladungen here.

+0

Muss ich RouteConfig als vorübergehenden Service registrieren und es der Configure-Methode hinzufügen? – koryakinp

+0

Ich denke, das wäre ein Overkill. – Mrchief