15 chuong 15 tủ tài liệu bách khoa

61 37 0
15 chuong 15 tủ tài liệu bách khoa

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CHAPTER 15 URL Routing Trước giới thiệu MVC Framework, ASP.NET giả định có mối quan hệ trực tiếp URL yêu cầu tập tin đĩa cứng máy chủ Công việc máy chủ nhận yêu cầu từ trình duyệt cung cấp đầu từ tập tin tương ứng Cách tiếp cận làm tốt Web Form, trang ASPX tập tin phản hồi khép kín đến u cầu Nó khơng có ý nghĩa ứng dụng MVC, nơi yêu cầu xử lý phương thức action lớp controller tương quan one-to-one với tập tin đĩa Để xử lý URL MVC, tảng ASP.NET sử dụng hệ thống định tuyến Trong chương này, cho bạn cách sử dụng hệ thống định tuyến để tạo mạnh mẽ linh hoạt xử lý URL cho dự án bạn Như bạn thấy, hệ thống định tuyến cho phép bạn tạo mơ hình URL mà bạn mong muốn diễn đạt chúng cách rõ ràng súc tích Các hệ thống định tuyến có hai chức năng:  Kiểm tra URL gọi đến tìm controller action yêu cầu định  Tạo URL gửi Đây URL xuất HTML biểu diễn từ View để action cụ thể gọi người dùng nhấp chuột vào liên kết (tại thời điểm đó, trở thành URL đến lần nữa) Trong chương này, tập trung vào việc xác định định tuyến sử dụng chúng để xử lý URL đến để người dùng tiếp cận với điều khiển hành động bạn Có hai cách để tạo định tuyến ứng dụng MVC Framework: ước dựa định tuyến thuộc tính định tuyến Bạn làm quen với quy ước dựa định tuyến bạn sử dụng phiên trước MVC Framework, thuộc tính định tuyến để MVC Tơi giải thích hai phương pháp chương Sau đó, chương tiếp theo, tơi cho bạn thấy làm để sử dụng định tuyến tương tự để tạo URL bạn cần đưa vào quan điểm bạn, cho bạn thấy làm để tùy chỉnh hệ thống định tuyến sử dụng tính liên quan gọi khu vực Bảng 15-1 cung cấp tóm tắt cho chương Chuẩn bị ví dụ Để chứng minh hệ thống định tuyến, cần dự án mà tơi thêm định tuyến Tôi tạo ứng dụng MVC cách sử dụng the Empty template, gọi dự án UrlsAndRoutes Tôi thêm dự án thử nghiệm đển the Visual Studio solution gọi UrlsAndRoutes Thử nghiệm cách kiểm tra tùy chọn the Add Unit Tests, thể hình 15-1 Hình 15-1 Tạo dự án ứng dụng MVC Empty với kỹ thuật kiểm nghiệm Tôi cho bạn làm để tạo kỹ thuật kiểm nghiệm tay cho chương SportsStore, điều tạo kết xử lý tham chiếu dự án tự động tương tự Bạn cần thêm Moq, đó, nhập vào lệnh sau giao diện điều khiển NuGet: Install-Package Moq -version 4.1.1309.1617 -projectname UrlsAndRoutes.Tests Tạo Controllers Ví dụ: Để chứng minh tính định tuyến, tơi thêm số controller đơn giản vào ứng dụng ví dụ Tôi quan tâm đến cách thức mà URL diễn giải để gọi phương thức action, đó, mơ hình view tơi sử dụng giá trị chuỗi view bag có gọi controller tên phương thức action Đầu tiên, tạo Home controller thiết lập nội dung để phù hợp với thứ Liệt kê 15-1 Bảng liệt kê 15-1 Nội dung tập tin HomeController.cs using System.Web.Mvc; namespace UrlsAndRoutes.Controllers { public class HomeController : Controller { public ActionResult Index() { ViewBag.Controller = "Home"; ViewBag.Action = "Index"; return View("ActionName"); } } } Tạo Customer controllervà thiết lập nội dung để phù hợp với Liệt kê 15-2 Bảng liệt kê 15-2 Nội dung tập tin CustomerController.cs using System.Web.Mvc; namespace UrlsAndRoutes.Controllers { class CustomerController : Controller { public public ActionResult Index() { ViewBag.Controller = "Customer"; ViewBag.Action = "Index"; return View("ActionName"); } public ActionResult List() { ViewBag.Controller = "Customer"; ViewBag.Action = "List"; return View("ActionName"); } } } Tạo Admin controller chỉnh sửa nội dung để phù hợp với mã hiển thị Liệt kê 15-3 Bảng liệt kê 15-3 Nội dung tập tin AdminController.cs using System.Web.Mvc; namespace UrlsAndRoutes.Controllers { public class AdminController : Controller { public ActionResult Index() { ViewBag.Controller = "Admin"; ViewBag.Action = "Index"; return View("ActionName"); } } } Tạo View Tôi rõ view ActionName tất phương thức action controllers, cho phép tơi để xác định view sử dụng suốt ứng dụng ví dụ Tạo thư mục có tên Shared thư mục Views thêm view gọi ActionName.cshtml vào nó, thiết lập nội dung quan điểm để phù hợp với Liệt kê 15-4 Bảng liệt kê 15-4 Nội dung File ActionName.cshtml @{ Layout = null; } ActionName The controller is: @ViewBag.Controller The action is: @ViewBag.Action Thiết lập URL bắt đầu kiểm thử ứng dụng Như tơi giải thích phần sách này, Visual Studio cố gắng tìm URL mà bạn muốn trình duyệt yêu cầu dựa tập tin bạn chỉnh sửa bạn bắt đầu debugger Đây ý tưởng tốt mà nhanh chóng trở nên khó chịu tính mà tơi ln ln vơ hiệu hóa Chọn UrlsAndRoutes Properties từ menu Project Studio Visual, chuyển sang tab Web kiểm tra tùy chọn Specific Page phần Start Action Bạn không cần phải cung cấp giá trị kiểm tra tùy chọn đủ Nếu bạn bắt đầu ứng dụng ví dụ, bạn thấy câu trả lời thể hình 15-2 Hình 15-2 Chạy ứng dụng ví dụ Giới thiệu Mẫu URL Các hệ thống định tuyến làm kỳ diệu cách sử dụng tập hợp định tuyến Những định tuyến bao gồm lược đồ URL lược đồ cho ứng dụng, tập hợp URL mà ứng dụng bạn nhận đáp ứng Tôi không cần phải tự loại tất URL riêng biệt sẵn sàng để hỗ trợ ứng dụng Thay vào đó, định tuyến có chứa mẫu URL, so sánh với URL đến Nếu URL phù hợp với mơ hình, sau sử dụng hệ thống định tuyến để xử lý URL Hãy bắt đầu với URL cho ứng dụng ví dụ: http://mysite.com/Admin/Index URL chia thành phân đoạn Đây phận URL, không bao gồm hostname chuỗi truy vấn, phân cách ký tự / Trong URL ví dụ, có hai phân đoạn, thể hình 15-3 Hình 15-3 Những đoạn URL ví dụ Phân đoạn chứa từ Admin, phân đoạn thứ hai chứa từ Index Tinh mắt hơn, rõ ràng phân đoạn liên quan đến controller phân đoạn thứ hai liên quan đến action Nhưng, tất nhiên, cần phải thể mối quan hệ cách mà hệ thống định tuyến hiểu Dưới mẫu URL mà thực điều này: {controller}/{action} Khi xử lý yêu cầu gửi đến, công việc hệ thống định tuyến kết hợp URL yêu cầu đến mơ hình giải nén giá trị từ URL cho biến mảng xác định mơ hình Các biến mảng biểu diễn cách sử dụng dấu ngoặc (các ký tự { } ) Các mẫu ví dụ có hai biến mảng với tên controller action, giá trị biến mảng controller Admin giá trị biến mảng action Index Tơi nói phù hợp với mơ hình, ứng dụng MVC thường có số định tuyến hệ thống định tuyến so sánh URL gọi đến đến mẫu URL định tuyến tìm thấy phù hợp Lưu ý Các hệ thống định tuyến khơng có kiến thức đặc biệt controller action Nó trích giá trị cho biến mảng Đó sau trình giải yêu cầu, yêu cầu đến MVC Framework thích hợp, có nghĩa gán cho biến số controller action Đây lý hệ thống định tuyến sử dụng với Web Forms API Web (Tôi giới thiệu API Web Chương 27 tơi mơ tả u cầu q trình xử lý ASP.NET chi tiết sách Pro ASP.NET MVC Platform tôi.) Theo mặc định, mẫu URL phù hợp với URL mà có số lượng xác phân đoạn Ví dụ, mơ hình {controller} / {action} phù hợp với URL mà có hai phân đoạn, minh họa Bảng 15-2 Bảng 15-2 URL Phù hợp Request URL http://mysite.com/Admin/Index Segment Variables controller = Adminaction = Index http://mysite.com/Index/Admin controller = Indexaction = Admin http://mysite.com/Apples/Oranges controller = Applesaction = Oranges http://mysite.com/Admin No match—too few segments http://mysite.com/Admin/Index/Soccer No match—too many segments Bảng 15-2 nhấn mạnh hai hành vi quan trọng mẫu URL:  Mơ hình URL bảo thủ, phù hợp với URL có số phân đoạn mơ hình Bạn thấy điều ví dụ thứ tư thứ năm bảng  Mơ hình URL tự Nếu URL khơng có số xác phân đoạn, mơ hình trích xuất giá trị cho biến mảng, điều Đây hành vi mặc định, chìa khóa để hiểu Mơ hình URL chức Tôi cho bạn làm để thay đổi mặc định sau chương Như đề cập, hệ thống định tuyến điều ứng dụng MVC, Mơ hình URL phù hợp khơng có controllerhoặc action tương ứng với giá trị chiết xuất từ URL Bạn thấy điều chứng minh ví dụ thứ hai Bảng 15-2 Tơi hốn Admin phân đoạn Index URL, đó, giá trị chiết xuất từ URL hốn đổi, khơng có controller Index dự án ví dụ Tạo Đăng ký Định tuyến đơn giản Một bạn có mẫu URL tâm trí, bạn sử dụng để xác định định tuyến Định tuyến định nghĩa file RouteConfig.cs, thư mục dự án App_Start Bạn xem nội dung ban đầu mà Visual Studio xác định cho tập tin Liệt kê 15-5 Bảng liệt kê 15-5 Nội dung mặc định tập tin RouteConfig.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace UrlsAndRoutes { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", UrlParameter.Optional } ); } } } id = Phương thức RegisterRoutes tĩnh định nghĩa file RouteConfig.cs gọi từ tập tin Global.asax.cs, thiết lập số tính cốt lõi MVC ứng dụng bắt đầu chạy Bạn xem nội dung mặc định tập tin Global.asax.cs Liệt kê 15-6, làm bật lời gọi đến phương thức RouteConfig.RegisterRoutes, làm từ phương thức Application_Start Bảng liệt kê 15-6 Nội dung mặc định File Global.asax.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace UrlsAndRoutes { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); } } } Phương pháp Application_Start gọi tảng ASP.NET ứng dụng MVC lần bắt đầu chạy, dẫn đến phương pháp RouteConfig.RegisterRoutes gọi Các tham số để phương pháp giá trị thuộc tính RouteTable.Routes tĩnh, mà thực thể lớp RouteCollection, mà mô tả Bảng liệt kê 15-7 cho thấy làm để tạo định tuyến sử dụng mẫu ví dụ URL từ phần trước phương thức RegisterRoutes tập tin RouteConfig.cs (Tôi gỡ bỏ báo cáo khác phương thức để tơi tập trung vào ví dụ.) Bảng liệt kê 15-7 Đăng ký Route RouteConfig.cs file using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace UrlsAndRoutes { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { = new Route("{controller}/{action}", new MvcRouteHandler()); routes.Add("MyRoute", myRoute); } Route myRoute } } Tôi tạo tuyến sử dụng mẫu URL hàm tạo tham số, mà tơi trình bày chuỗi Tơi truyền thực thể MvcRouteHandler đến hàm tạo Công nghệ ASP.NET khác cung cấp lớp khác để điều chỉnh hành vi định tuyến, lớp sử dụng cho ứng dụng ASP.NET MVC Một tạo định tuyến, thêm vào đối tượng RouteCollection sử dụng phương thức Add, truyền vào tên muốn route biết đến định tuyến Mẹo: đặt tên định tuyến bạn không bắt buộc có tranh luận triết học mà làm hi sinh số phân chia ngắn gọn mối lo ngại mà không xuất phát từ định tuyến Tôi thoải mái việc đặt tên, tơi giải thích điều vấn đề "Tạo URL từ cụ Route" Chương 16 Một cách thuận tiện việc đăng ký định tuyến sử dụng phương thức MapRoute xác định lớp RouteCollection Liệt kê 15-8 cho thấy làm tơi sử dụng phương pháp để đăng ký định tuyến, có tác dụng tương tự ví dụ trước, có cú pháp ngắn gọn Name Description Attribute Constraint Matches alphabet AlphaRouteConstraint() characters, irrespective of alpha case (A–Z, a–z) Matches a value that can BoolRouteConstraint() bool be parsed into a bool Matches a value that can DateTimeRouteConstraint() be parsed into a datetime DateTime Matches a value that can DecimalRouteConstraint() be parsed into a decimal decimal Matches a value that can DoubleRouteConstraint() be parsed into a double double Matches a value that can FloatRouteConstraint() float be parsed into a float Matches a value that can IntRouteConstraint() int be parsed into an int Matches a value with the specified LengthRouteConstraint(len)LengthRouteConstraint(min, number of length(len)length(min characters or that is max) max) between and max characters in length Matches a value that can be parsed LongRouteConstraint() long into a long Matches an int value if the value MaxRouteConstraint(val) max(val) is less than val MaxLengthRouteConstraint(len) Matches a string with no more than maxlength(len) len characters Matches an int value if the value MinRouteConstraint(val) min(val) is more than val MinLengthRouteConstraint(len) Matches a string with at least len minlength(len) characters Matches an RangeRouteConstraint(min, max) int value if the value range(min, max) is between and max Bạn kết hợp ràng buộc khác cho biến mảng cách sử dụng lớp CompoundRouteConstraint, mà chấp nhận mảng ràng buộc đối số xây dựng Trong Liệt kê 15-32, bạn nhìn thấy cách tơi sử dụng tính để áp dụng AlphaRouteConstraint MinLengthRouteConstraint vào biến mảng id để đảm bảo định tuyến phù hợp với giá trị chuỗi có chứa ký tự chữ có sáu ký tự Bảng liệt 15-32 Kết hợp ràng buộc định tuyến tập tin RouteConfig.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; using System.Web.Mvc.Routing.Constraints; namespace UrlsAndRoutes { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.MapRoute("MyRoute", " {controller}/{action}/{id}/{*catchall}", new { controller = "Home", action = "Index", id = UrlParameter.Optio nal }, new { controller = "^H.*", action = "Index|About", httpMethod = new HttpMethodConstraint("GET"), id = new CompoundRouteConstraint(new IRouteConstraint[] { new AlphaRouteConstraint(), new MinLengthRouteConstraint(6) }) }, new[] { "URLsAndRoutes.Controllers" }); } } } Xác định Ràng Buộc Tuỳ chỉnh Nếu ràng buộc chuẩn không đủ cho nhu cầu bạn, bạn xác định ràng buộc riêng bạn cách thực giao diện IRouteConstraint Để chứng minh tính này, tơi thêm thư mục sở hạ tầng cho dự án ví dụ tạo lớp tập tin gọi UserAgentConstraint.cs, nội dung hiển thị Liệt kê 15-33 Bảng liệt 15-33 Nội dung tập tin UserAgentConstraint.cs using System.Web; using System.Web.Rout ing; namespace UrlsAndRoutes.I nfrastructure { public class UserAgentConstr aint : IRouteConstraint { private string requiredUserAge nt; public UserAgentConstraint(string agentParam) { agentParam; } requiredUserAgent = public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) { return httpContext.Request.UserAgent != null && httpContext.Request.UserAgent.Contains(requiredUserAgent); } } } Giao diện IRouteConstraint định nghĩa phương thức kết hợp, cài đặt sử dụng để hệ thống định tuyến ràng buộc thỏa mãn Các tham số cho phương thức kết hợp cung cấp quyền truy cập đến yêu cầu từ khách hàng, định tuyến tính tốn, tên tham số ràng buộc, biến mảng chiết xuất từ URL, chi tiết bất ký nơi yêu cầu để kiểm tra URL đến Ví dụ, kiểm tra giá trị thuộc khách hàng yêu cầu UserAgent để xem có chứa giá trị truyền qua đến hàm tạo Bảng liệt kê 15-34 cho thấy ràng buộc tùy chỉnh sử dụng định tuyến Bảng liệt 15-34 Áp dụng ràng buộc Custom định tuyến tập tin RouteConfig.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; using System.Web.Mvc.Routing.Constraints; using UrlsAndRoutes.Infrastructure; namespace UrlsAndRoutes { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.MapRoute("ChromeRoute", "{*catchall}", new { controller = "Home", action = "Index" }, new { customConstraint = new UserAgentConstraint("Chrome") }, new[] { "UrlsAndRoutes.AdditionalControllers" }); routes.MapRoute("MyRoute", " {controller}/{action}/{id}/{*catchall}", new { controller = "Home", action = "Index", id = UrlParameter.Optio nal }, new { controller = "^H.*", action = "Index|About", httpMethod = new HttpMethodConstraint("GET"), CompoundRouteConstraint(new IRouteConstraint[] { new AlphaRouteConstraint(), new MinLengthRouteConstraint(6) id = new }) }, new[] { "URLsAndRoutes.Controllers" }); } } } Trong liệt kê, ràng buộc định tuyến để kết hợp với yêu cầu làm từ trình duyệt có chuỗi user-agent chứa Chrome Nếu định tuyến kết hợp, sau yêu cầu gửi đến phương thức action Index controller Home định nghĩa thư mục AdditionalControllers, không phụ thuộc vào cấu trúc nội dung URL mà yêu cầu Các mẫu URL gồm biến mảng catchall, có nghĩa giá trị cho controller action biến mảng lấy từ giá trị mặc định URL Định tuyến thứ hai kết hợp với tất yêu cầu khác controller mục tiêu thư mục Controller, tùy thuộc vào loại giá trị ràng buộc áp dụng phần trước Hiệu định tuyến loại trình duyệt ln ln kết thúc vị trí ứng dụng Bạn thấy điều hình 15-13, cho thấy hiệu việc điều hướng đến ứng dụng cách sử dụng Google Chrome Hình 15-13 Việc chuyển hướng tới ứng dụng cách sử dụng trình duyệt Google Chrome Hình 15-14 cho thấy kết điều hướng đến ứng dụng ví dụ cách sử dụng Internet Explorer (Chú ý tơi có thêm phân đoạn thứ ba có chứa sáu nhiều ký tự alpha để làm cho định tuyến thứ hai kết hợp với URL ràng buộc tơi áp dụng phần trước.) Hình 15-14 Việc chuyển hướng tới ứng dụng cách sử dụng Internet Explorer Lưu ý Để rõ ràng, điều mà tơi nhận thư tức giận, không cho bạn ràng buộc ứng dụng bạn để hỗ trợ loại trình duyệt Tơi sử dụng chuỗi user-agent để chứng minh ràng buộc định tuyến tin tưởng vào hội cho tất trình duyệt Tơi thực ghét trang web mà cố gắng để buộc tham chiếu họ cho trình duyệt người sử dụng Sử dụng thuộc tính định tuyến Tất ví dụ chương xác định cách sử dụng kỹ thuật gọi quy ước dựa định tuyến MVC hỗ trợ thêm cho kỹ thuật gọi thuộc tính định tuyến, định tuyến xác định thuộc tính C # áp dụng trực tiếp cho lớp controller Trong phần tiếp theo, cho bạn cách tạo cấu hình định tuyến cách sử dụng thuộc tính, mà pha trộn cách tự với định tuyến quy ước dựa tiêu chuẩn QUY ƯỚC thuộc tính định tuyến Thuộc tính định tuyến bổ sung lớn cho MVC 5, phải thừa nhận fan hâm mộ Một mục tiêu mơ hình MVC là, tơi mơ tả Chương 3, để tách phần khác ứng dụng để làm cho chúng dễ dàng để viết, kiểm tra bảo trì Tơi thích quy ước dựa định tuyến controller khơng có kiến thức phụ thuộc vào cấu hình định tuyến ứng dụng Ngược lại, tơi thấy thuộc tính định tuyến làm cho nước đục làm mờ ranh giới hai thành phần quan trọng ứng dụng Điều nói rằng, thuộc tính định tuyến hỗ trợ phần MVC Framework MVC bạn nên đọc phần sau đưa định bạn Thực tế khơng thích tính mà phải bắt bạn cân nhắc để sử dụng dự án bạn Tin tức tốt hai cách tiếp cận để tạo định tuyến sử dụng sở hạ tầng giống điều có nghĩa, bạn thấy phần tiếp theo, bạn sử dụng hai phương pháp tiếp cận dự án khơnh có tác động xấu Việc kích hoạt áp dụng thuộc tính định tuyến Thuộc tính định tuyến mặc định vơ hiệu hóa kích hoạt phương thức mở rộng MapMvcAttributeRoutes, gọi đối tượng RouteCollection truyền qua tham số cho phương thức RegisterRoutes tĩnh Tôi thêm phương thức để gọi đến tập tin RouteConfig.cs Liệt kê 15-35, đơn giản hóa định tuyến ứng dụng để tơi tập trung vào việc sử dụng thuộc tính Bảng liệt 15-35 Việc kích hoạt thuộc tính định tuyến tập tin RouteConfig.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; using UrlsAndRoutes.Infrastructure; namespace UrlsAndRoutes { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.MapMvcAttributeRoutes(); routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new[] { "UrlsAndRoutes.Controllers" }); } } } Gọi phương thức MapMvcAttributeRoutes khiến hệ thống định tuyến kiểm tra lớp controller ứng dụng tìm kiếm thuộc tính cấu hình định tuyến Các thuộc tính quan trọng gọi định tuyến bạn nhìn thấy cách tơi áp dụng đến controller Customer Liệt kê 15-36 Bảng liệt 15-36 Áp dụng thuộc tính định tuyến tâp tin CustomerController.cs using System.Web.Mvc; namespace UrlsAndRoutes.Controllers { class CustomerController : Controller { public [Route("Test")] public ActionResult Index() { ViewBag.Controller = "Customer"; ViewBag.Action = "Index"; return View("ActionName"); } public ActionResult List() { ViewBag.Controller = "Customer"; ViewBag.Action = "List"; return View("ActionName"); } } } Đây việc sử dụng thuộc tính định tuyến, xác định định tuyến tĩnh cho phương thức action Định tuyến định nghĩa hai thuộc tính, mơ tả Bảng 15-7 Bảng 15-7 Các thông số hỗ trợ thuộc tính định tuyến Name Name route Description Assigns a name to the route, used for generating outgoing URLs from a specific Template Defines the pattern that will be used to match URLs that target the action method Nếu bạn cung cấp giá trị áp dụng thuộc tính định tuyến-như tơi làm liệt kê giá trị giả định mơ hình sử dụng để kết hợp với định tuyến Mơ hình cho thuộc tính định tuyến theo cấu trúc tương tự quy ước dựa định tuyến, có số khác biệt nói đến việc ràng buộc định tuyến kết hợp (mà mô tả việc áp dụng phần ràng buộc định tuyến, sau chương này) Trong ví dụ này, tơi sử dụng thuộc tính định tuyến để xác định action Index controller Customer truy cập thông qua URL / Test Bạn xem kết hình 15-15 Tơi cho bạn cách sử dụng thuộc Name Chương 16 Hình 15-15 Kết q việc áp dụng thuộc tính định tuyến để tạo định tuyến tĩnh Khi phương thức action liên kết với thuộc tính định tuyến, khơng truy cập thơng qua định tuyến quy ước dựa định nghĩa tập tin RouteConfig.cs Đối với ví dụ tơi, điều có nghĩa action Index controller Customer khơng thơng qua URL / Customer / Index Chú ý :Thuộc tính định tuyến ngừng quy ước định tuyến từ nhắm mục tiêu phương thức action thuộc tính định tuyến bị vơ hiệu hóa Hãy cẩn thận để gọi phương thức MapMvcAttributeRoutes tập tin RouteConfig.cs bạn tạo phương thức action truy cập Thuộc tính định tuyến ảnh hưởng đến phương thức mà áp dụng, điều có nghĩa phương thức action Index controller Customer truy cập thơng qua URL / Test, action List phải nhắm mục tiêu cách sử dụng / Customer / Danh sách URL Mẹo Bạn áp dụng thuộc tính định tuyến đến phương thức action nhiều lần trường hợp tạo định tuyến Tạo định tuyến với biến mảng Tính thuộc tính định tuyến hỗ trợ tất tính giống quy ước dựa định tuyến, thể thông qua thuộc tính Điều bao gồm việc tạo định tuyến có chứa biến mảng bạn thấy ví dụ định tuyến Liệt kê 15-37 Bảng liệt 15-37 Tạo thuộc tính định tuyến với biến mảng tâp tinCustomerController.cs using System.Web.Mvc; namespace UrlsAndRoutes.Controllers { class CustomerController : Controller { public [Route("Test")] public ActionResult Index() { ViewBag.Controller = "Customer"; ViewBag.Action = "Index"; return View("ActionName"); } [Route("Users/Add/{user}/{id}")] public string Create(string user, int id) { return string.Format("User: {0}, ID: {1}", user, id); } public ActionResult List() { ViewBag.Controller = "Customer"; ViewBag.Action = "List"; return View("ActionName"); } } } Tôi thêm phương thức action gọi Create lấy đối số string int Để đơn giản, trả kết chuỗi từ phương thức mà không cần phải tạo view Định tuyến tơi định nghĩa với thuộc tính Route trộn tiền tố tĩnh (Users / Add) với người dùng biến mảng id tương ứng đén đối số phương thức MVC Framework sử dụng tính mơ hình ràng buộc, mà mô tả chương 25, để chuyển đổi giá trị biến mảng cho loại xác để gọi phương thức Create Hình 15-16 cho thấy tác dụng điều hướng đến URL / Users / Add / Adam / 100 Hình 15-16 Điều hướng đến URL với biến mảng Chú ý thực thể thuộc tính định tuyến hoạt động độc lập, điều có nghĩa tơi tạo định tuyến hoàn toàn khác đến mục tiêu phương thức action cotroller, mô tả Bảng 15-8 Bảng 15-8 Các Action controller Customer mục tiêu định tuyến Action URL Index Create List /Test /Users/Add/Adam/100 (or any values for the last two segments) /Customer/List (through the route defined in the RouteConfig.cs file) Áp dụng ràng buộc định tuyến Các định tuyến xác định cách sử dụng thuộc tính ràng buộc giống định nghĩa tập tin RouteConfig.cs, kỹ thuật trực tiếp Để minh chứng cho cách làm việc này, thêm phương thức action bổ sung vào controller Customer, thể Liệt kê 15-38 Bảng liệt 15-38 Thêm phương thức action định tuyến đến tập tin CustomerController.cs using System.Web.Mvc; namespace UrlsAndRoutes.Controllers { class CustomerController : Controller { public [Route("Test")] public ActionResult Index() { ViewBag.Controller = "Customer"; ViewBag.Action = "Index"; return View("ActionName"); } [Route("Users/Add/{user}/{id:int}")] public string Create(string user, int id) { return string.Format("Create Method - User: {0}, ID: {1}", user, id); [Route("Users/Add/{user}/{password}")] public string ChangePass(string user, string password) { string.Format("ChangePass Method - User: {0}, Pass: {1}", user, password); } return } public ActionResult List() { ViewBag.Controller = "Customer"; ViewBag.Action = "List"; return View("ActionName"); } } } Phương pháp action mới, gọi ChangePass, có hai đối số chuỗi Nhưng tơi sử dụng thuộc tính Route để kết hợp action với mẫu URL tương tự action Tạo phương thức: tiền tố tĩnh / Users / Add, sau hai biến mạng Để phân biệt action, áp dụng ràng buộc cho thuộc tính định tuyến cho phương thức Create, sau: [Route("Users/Add/{user}/{id :int }")] Tôi cho phép tên biến mảng-id-với dấu hai chấm sau kiểu int Điều nói đến hệ thống định tuyến mà rõ phương thức action Create nhắm mục đích yêu cầu nơi giá trị cung cấp cho mảng id giá trị int hợp lệ Ràng buộc int tương ứng đến lớp IntRouteConstraint ràng buộc Bảng 15-6 giới thiệu tập hợp tên ràng buộc mà bạn sử dụng để truy cập loại giá trị ràng buộc xây dựng bên Bạn xem tác dụng ràng buộc cách khởi động ứng dụng yêu cầu / Users / Add / Adam / 100 / Users / Add / Adam / URL Secret Mảng cuối URL có giá trị int hướng dẫn đến phương thức Create Mảng cuối URL thứ hai giá trị int hướng đến phương pháp ChangePass, thể hình 15-17 Hình 15-17 Tác dụng việc áp dụng ràng buộc thông qua thuộc tính Định tuyến Các ràng buộc Kết hợp Bạn áp dụng nhiều ràng buộc biến mảng để hạn chế phạm vi giá trị mà đinh tuyến kết hợp Trong Liệt kê 15-39, bạn nhìn thấy cách tơi kết hợp alpha thời gian ràng buộc định tuyến cho phương thức ChangePass Bảng liệt 15-39 Áp dụng Nhiều ràng buộc định tuyến tập tin CustomerController.cs [Route("Users/Add/{user}/{password :alpha:length(6) }")] public string ChangePass(string user, string password) { return string.Format("ChangePass Method - User: {0}, Pass: {1}", user, password); } Nhiều ràng buộc xích lại với cách sử dụng định dạng gần giống ràng buộc nhất: dấu hai chấm theo sau tên ràng buộc và, cần, giá trị ngoặc đơn Định tuyến tạo thuộc tính ví dụ kết hợp với chuỗi chữ có sáu ký tự Nhiều khó khăn xích lại for cách sử dụng định dạng tương tự đối such as with one hạn chế nhất: dấu hai chấm following is the name of ràng buộc và, if cần, a value in brackets đơn Các tuyến đường been created by attributes in this example will only phù hợp for the string chữ That sáu ký tự Cảnh cáo: Hãy cẩn thận áp dụng ràng buộc Các định tuyến xác định thuộc tính định tuyến làm việc cách định nghĩa tập tin RouteConfig.cs kết 404-Not Found gửi đến trình duyệt cho URL mà khơng thể kết hợp với phương thức action Luôn xác định định tuyến dự phòng phù hợp với giá trị mà URL chứa Sử dụng định tuyến tiền tố Bạn sử dụng thuộc tính RoutePrefix để xác định tiền tố phổ biến mà áp dụng cho tất định tuyến xác định controller, hữu ích bạn có nhiều phương thức action nên có nhắm mục tiêu cách sử dụng URL gốc giống Bạn thấy cách tơi áp dụng thuộc tính RoutePrefix đến CustomerController Liệt kê 15-40 Bảng liệt 15-40 Thiết lập tiền tố định tuyến phổ biến tập tin CustomerController.cs using System.Web.Mvc; namespace UrlsAndRoutes.Controllers { [RoutePrefix("Users")] public class CustomerController : Controller { [Route("∼/Test")] public ActionResult Index() { ViewBag.Controller = "Customer"; ViewBag.Action = "Index"; return View("ActionName"); } [Route("Add/{user}/{id:int}")] public string Create(string user, int id) { return string.Format("Create Method - User: {0}, ID: {1}", user, id); [Route("Add/{user}/{password}")] public string ChangePass(string user, string password) { string.Format("ChangePass Method - User: {0}, Pass: {1}", user, password); } } return public ActionResult List() { ViewBag.Controller = "Customer"; ViewBag.Action = "List"; return View("ActionName"); } } } Tôi sử dụng thuộc tính RoutePrefix để xác định định tuyến cho phương thức action nên bắt đầu với người dùng Với tiền tố xác định, cập nhật thuộc tính định tuyến cho phương thức action Create ChangePass để loại bỏ tiền tố MVC Framework kết hợp với mơ hình tiền tố URL tự động định tuyến tạo Chú ý thay đổi mẫu URL cho thuộc tính định tuyến áp dụng cho phương thức action Index, sau: [Route("∼/Test")] Những tiền tố URL với ~ / cho MVC Framework mà tơi khơng muốn thuộc tính RoutePrefix áp dụng cho phương thức action Index, có nghĩa truy cập thơng qua URL / Test Tóm lược Trong chương này, tơi lấy nhìn sâu sắc hệ thống định tuyến Bạn thấy cách định tuyến xác định theo quy ước với thuộc tính Bạn thấy cách URL gửi đến kết hợp xử lý, làm để tùy chỉnh định tuyến thay đổi cách mà chúng kết hợp với mảng URL cách sử dụng giá trị mặc định mảng tùy chọn Tôi cho bạn thấy cách để ràng buộc định tuyến để thu hẹp phạm vi yêu cầu để chúng kết hợp, sử dụng lớp ràng buộc tích hợp sử dụng ràng buộc tùy chỉnh Trong chương tiếp theo, cho bạn cách để tạo URL gửi từ định tuyến View bạn làm để sử dụng tính miền MVC Framework, mà dựa hệ thống định tuyến sử dụng để quản lý ứng dụng MVC Framework lớn phức tạp ... phân khúc Tôi định nghĩa biến riêng tơi, thể Liệt kê 15- 15 (Tôi gỡ bỏ định tuyến có từ phần đoạn trước để tơi bắt đầu lại.) Bảng liệt 15- 15 Định nghĩa biến bổ sung mẫu URL RouteConfig.cs file... chỉnh quy định định tuyến Listing 15- 15 gọi id Tơi sửa đổi phương thức action CustomVariable controller Home để có tham số phù hợp, Liệt kê 15- 18 Bảng liệt 15- 18 Thêm tham số phương thức Action... mơ hình, bạn thấy kết giống thể hình 15 -4, minh họa ảnh hưởng điều hướng đến / Admin / Index Hình 15- 4 Điều hướng đường đơn giản Route đơn giản tơi Liệt kê 15- 8 khơng nói MVC Framework đến cách

Ngày đăng: 09/11/2019, 08:56

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan