2015-01-06 20 views
5

Tôi có một ứng dụng ASP.NET MVC. Tôi đang học ASP.NET vNext. Để làm điều đó, tôi quyết định chuyển ứng dụng hiện có của mình sang vNext. Điều tôi không chắc chắn là, làm thế nào để chuyển qua các tuyến đường của tôi.Di chuyển các tuyến đường ASP.NET MVC sang ASP.NET vNext

Trong nguồn gốc ứng dụng ASP.NET MVC của tôi, tôi đã điều sau đây:

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

Bây giờ trên thế giới ASP.NET vNext này, tôi không chắc chắn làm thế nào để thiết lập các tuyến đường. Tôi đã điều sau đây:

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

Tuy nhiên, tôi không chắc chắn trong hai điều:

  1. Làm thế nào để thêm các tuyến đường tôi theo quy định tại RouteConfig.cs trước .
  2. Cách sử dụng views/home/Index.cshtml làm đường dẫn mặc định của tôi thay cho số app.UseWelcomePage().
+2

Có gì sai với 'app.UseMvc (routes => RouteConfig.RegisterRoutes (routes))'? Đây không phải là một sự phân biệt vNext, nó chỉ là MVC thông thường ngoại trừ bạn đang sử dụng OWIN để khởi động ứng dụng của bạn thay vì đăng ký rõ ràng các tuyến đường của bạn trong Global.asax. Định tuyến hoạt động giống nhau, bạn chỉ cần gọi 'RegisterRoutes' từ một vị trí khác. Đối với vấn đề Home/Index khác của bạn, chỉ cần loại bỏ các cuộc gọi đến 'UseWelcomePage' - định tuyến của bạn sẽ làm những gì nó đã làm được nếu không. –

+0

@AntP - Có cách tiếp cận "được khuyến nghị" nhiều hơn trong vNext không? Tôi đang cố gắng nhất quán càng tốt với vNext để tôi tìm hiểu nó một cách chính xác. Cảm ơn bạn. –

+0

Bạn vẫn cần phải bao gồm các tuyến đường của bạn trong đại biểu bạn đang đi đến 'UseMvc' - có hay không bạn gọi là' RouteConfig.RegisterRoutes (routes) 'trong đó hoặc chỉ khai báo một đại biểu ẩn danh và thêm tất cả các mã định tuyến ở đó (như trong ví dụ hiện tại của bạn) thực sự tạo ra rất ít sự khác biệt. Tôi có thể giữ nó trong 'RouteConfig' mặc dù chỉ để tránh bloating phương thức' Configure'. vNext convention sẽ chỉ ra rằng bạn sử dụng OWIN để khởi động ứng dụng của bạn (thay vì sử dụng phương thức 'Global.asax'), mà bạn đã làm. –

Trả lời

4

Disclaimer: Kể từ vNext vẫn đang trong phiên bản beta đang trong quá trình khuấy mỗi giờ, đoạn code tôi thấy ở đây có thể nhanh chóng trở nên lỗi thời, ngay cả trong những phút tiếp theo hoặc các giờ tiếp theo! Nếu điều đó xảy ra, trước khi bạn bỏ phiếu cho "tính năng này không hoạt động", hãy để lại nhận xét và tôi sẽ cố gắng hết sức để đưa nó lên mức hiện tại.

Đăng ký tuyến đường: Có vài thay đổi nhưng cách tiếp cận tổng thể vẫn giữ nguyên. Dưới đây là refactored 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 
} 

Note: Bạn cũng có thể rất inline đăng ký tuyến đường ở đây, nhưng tôi thích có nó trong tập tin riêng biệt để de-lộn xộn Startup.cs

Để chỉ UseWelcomePage cho một mình, hãy xem các tình trạng quá tải khác nhau here.

+0

Tôi có cần đăng ký RouteConfig như một dịch vụ tạm thời và tiêm nó vào phương pháp cấu hình không? – koryakinp

+0

Tôi nghĩ rằng đó sẽ là một quá mức cần thiết. – Mrchief

Các vấn đề liên quan