2015-01-06 17 views
5

Possiedo un'app MVC ASP.NET. Sto imparando ASP.NET vNext. Per farlo, ho deciso di trasferire la mia app esistente su vNext. La cosa di cui non sono sicuro è come portarlo sulle mie rotte.Migrazione di ASP.NET MVC Percorsi a ASP.NET vNext

Nella mia origine ASP.NET MVC app, ho il seguente:

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

Ora, in questo mondo ASP.NET vNext, io non sono sicuro di come percorsi di installazione. Ho il seguente:

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

Eppure, non sono sicuro di due cose:

  1. Come aggiungere gli itinerari ho definito in precedenza RouteConfig.cs .
  2. Come utilizzare views/home/Index.cshtml come percorso predefinito al posto di app.UseWelcomePage().
+2

Cosa c'è di sbagliato in 'app.UseMvc (routes => RouteConfig.RegisterRoutes (routes))'? Questa non è una distinzione vNext, è solo normale MVC, tranne che stai usando OWIN per avviare la tua app piuttosto che registrare esplicitamente i tuoi percorsi in Global.asax. Il routing funziona allo stesso modo, stai chiamando 'RegisterRoutes' da un posto diverso. Per quanto riguarda l'altro problema di Home/Index, basta rimuovere la chiamata a 'UseWelcomePage' - il routing farà ciò che altrimenti avrebbe fatto. –

+0

@AntP - Esiste un approccio più "consigliato" in vNext? Sto cercando di essere il più coerente possibile con vNext in modo che lo impari nel modo corretto. Grazie. –

+0

Hai ancora bisogno di includere i tuoi percorsi nel delegato che stai passando a "UseMvc" - anche se non chiami "RouteConfig".RegisterRoutes (routes) 'lì dentro o semplicemente dichiarare un delegato anonimo e aggiungere tutto il codice di routing lì (come nel tuo esempio corrente) fa davvero poca differenza. Probabilmente lo terrei in 'RouteConfig' anche se solo per evitare di gonfiare il metodo' Configure'. La convenzione vNext imporrebbe semplicemente di utilizzare OWIN per eseguire il bootstrap dell'applicazione (anziché utilizzare l'approccio 'Global.asax'), cosa che si sta già facendo. –

risposta

4

responsabilità: Dal vNext è ancora in beta è in fase di sfornare ogni ora, il codice vi mostro qui potrebbe diventare rapidamente obsoleti, anche nel prossimo minuto o la prossima ora! Se ciò accade, prima che tu decida di votare per "questo non funziona", lasciami un commento e farò del mio meglio per portarlo al livello attuale.

Registrazione percorsi: Ci sono pochi cambiamenti ma l'approccio generale rimane lo stesso. Ecco la tua refactoring RouteConfig:

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 
} 

Nota: Si può benissimo inline la registrazione percorso qui, ma io preferisco averlo in un file separato per disordinare Startup.cs

Al punto UseWelcomePage a uno dei tuoi, guarda i diversi sovraccarichi here.

+0

Devo registrare RouteConfig come servizio temporaneo e inserirlo nel metodo Configura? – koryakinp

+0

Penso che sarebbe eccessivo. – Mrchief

Problemi correlati