ASP.NET MVC – Routing

toi1em

Member
Feb 20, 2012
949
0
16
40
320x50.jpg


Định tuyến là quá trình đưa ra một yêu cầu HTTP đến một bộ điều khiển, các chức năng của quá trình này được thực hiện trong System.Web.Routing. Phần này không phải là một phần của ASP.NET MVC. Nó thực sự là một phần của thời gian chạy ASP.NET, và nó đã được chính thức phát hành với ASP.NET là SP1 .NET 3.5.

System.Web.Routing được sử dụng trong các Framwork MVC, nhưng nó cũng được sử dụng bởi ASP.NET Dynamic Data. MVC thúc đẩy việc định tuyến nó chỉ ra yêu cầu một là một Controller. Các tập tin Global.asax là một phần của ứng dụng, nơi bạn sẽ xác định các tuyến đường cho các ứng dụng.

Đây là đoạn mã trong Global.asax từ App MVC mà chúng tôi tạo ra trong các bài viết trước.

image001


Sau đây là việc thực hiện các lớp RouteConfig, trong đó có một phương thức RegisterRoutes.

image003


Bạn sẽ xác định các tuyến đường và các tuyến này sẽ map URL thành một hành động cụ thể để điều khiển. Một hành động chỉ là một phương thức trên controller. Nó cũng có thể chọn các thông số ra trong URL đó và vượt qua chúng như các tham số vào phương thức.

Vì vậy, tuyến đường này được xác định trong các ứng dụng như là các tuyến đường mặc định. Như đã thấy trong đoạn mã trên, khi bạn nhìn thấy một URL đến trong các hình thức như:

=> (something1)/(something2)/(something3): phần đầu tiên là tên điều khiển, phần thứ hai là tên hành động, và phần thứ ba là một tham số ID.

Understanding Routes

Ứng dụng MVC được sử dụng trong hệ thống định tuyến ASP.NET, nó quyết định đường đi thông qua các đường dẫn URL để điều khiển và hành động.

Khi Visual Studio tạo các dự án MVC, nó cho biết thêm một số tuyến đường mặc định để chúng ta bắt đầu làm việc. Khi bạn chạy ứng dụng của bạn, bạn sẽ thấy rằng Visual Studio đã chỉ đạo các trình duyệt đến cổng 55507. Bạn gần như sẽ thấy một số cổng khác nhau trong URL mà trình duyệt của bạn yêu cầu vì Visual Studio phân bổ một cổng ngẫu nhiên khi dự án được tạo ra.
image006
Trong ví dụ trước, chúng tôi đã thêm một HomeController, vì vậy bạn cũng có thể yêu cầu bất kỳ URL sau đây, và họ sẽ được dẫn đến các hành động Index trên HomeController.



Nếu bạn nối thêm /Home hoặc /Home/Index vào URL và nhấn ‘Enter’ nút, bạn sẽ thấy những kết quả tương tự từ các ứng dụng MVC.

Như bạn có thể thấy trong trường hợp này, các quy ước là chúng ta có một bộ điều khiển được gọi là HomeController và HomeController này sẽ là điểm khởi đầu cho ứng dụng MVC.

Các tuyến đường mặc định rằng Visual Studio tạo một dự án mới giả định rằng bạn sẽ tuân theo quy ước này. Nhưng nếu bạn muốn tuân theo quy ước riêng của bạn thì bạn sẽ cần phải sửa đổi lại các tuyến đường hoặc thêm một tuyến đường mới.

Custom Convention

Bạn chắc chắn có thể thêm các tuyến đường của riêng bạn.Nếu bạn không thích những tên controller, nếu bạn chỉ có các thông số ID khác nhau hoặc nếu bạn chỉ nói chung có một cấu trúc URL khác nhau cho trang web của bạn, sau đó bạn có thể vào tuyến đường của riêng bạn.

Chúng ta hãy xem xét một ví dụ đơn giản. Hãy xem xét chúng ta có một trang có chứa danh sách các quy trình đêt thực hiện:


routes.MapRoute( "Process", "Process/{action}/{id}", defaults: new { controller = "Process", action = "List ", id = UrlParameter.Optional });



1

2

3

4

5

6

7

8

9


routes.MapRoute(

"Process", "Process/{action}/{id}",

defaults: new

{

controller = "Process",

action = "List ",

id =

UrlParameter.Optional

});

Khi ai đó cho một địa URL với /Process/Action/Id, họ sẽ đi để điều khiển các quá trình. Chúng tôi có thể làm thay đổi cho các hành động khác đi một chút so với hành động mặc định, chúng ta có thể làm sửa thành một list thay vì Index.

Bây giờ một yêu cầu đến trông giống như localhosts/process. Các động cơ định tuyến sẽ sử dụng cấu hình định tuyến này để vượt qua, do đó, nó sẽ sử dụng một hành động mặc định trong Danh mục.

Sau đây chúng ta tiến hành thực hiện các lớp hoàn chỉnh:


public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Process", "Process/{action}/{id}", defaults: new { controller = "Process", action = "List ", id = UrlParameter.Optional }); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }); }



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24


public static void RegisterRoutes(RouteCollection routes)

{

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(

"Process", "Process/{action}/{id}",

defaults: new

{

controller = "Process",

action = "List ",

id =

UrlParameter.Optional

});

routes.MapRoute(

name: "Default", url: "{controller}/{action}/{id}",

defaults: new

{

controller = "Home",

action = "Index",

id =

UrlParameter.Optional

});

}

Bước 1 – Run và yêu cầu một trang với URL sau
image012


Bạn sẽ thây lỗi HTTP 404, vì các công cụ định tuyến được tìm trong ProcesssController không có sẵn.

Bước 2 – Tạo ProcessController bằng cách kích chuột phải vào thư mục Controllers và chọn Add → Controller.

image013


Nó sẽ hiển thị hộp thoại Add Scaffold

image015


Bước 3 – Chọn MVC 5 Controller – Empty và nhấp vào nút “Add“.

image017


Bước 4 – Đặt tên cho ProcessController và nhấp vào ‘Add’.

Bây giờ bạn sẽ thấy một file mới ProcessController.cs C# trong thư mục Controllers.

image018


Bây giờ hoạt động của chúng ta là danh sách thay vì Index, nên chúng ta sẽ tạo một hành động khác ở đây.

Bước 5 – Thay đổi kiểu trả về từ ActionResult sang chuỗi và cũng trả lại một số chuỗi từ hành động này bằng cách sử dụng đoạn mã sau.


public class ProcessController : Controller { // GET: Process public String List() { return "Hello Oktot.com, This is page process"; } }



1

2

3

4

5

6

7

8


public class ProcessController : Controller

{

// GET: Process

public String List()

{

return "Hello Oktot.com, This is page process";

}

}

Bước 6: Khi bạn chạy lại ứng dụng một lần nữa với địa chỉ bạn sẽ thấy kết quả xuất hiện từ danh sách chuỗi đã nhập ở ProcessController

ok


Chúc bạn thành công!


Sưu tầm & Tổng hợp
w: www.hanoiyeu.com
e: [email protected]