rated by 0 users
This post has 4 Replies | 3 Followers

Top 25 Contributor
Posts 28
Mrkean Posted: 01-17-2010 9:06 AM

Normal 0 false false false MicrosoftInternetExplorer4

Windows XP vẫn ở đây!

          Độc giả Eagle-eyed có thể nhớ rằng trong tháng trước là vấn đề lớn của Windows XP mà  chúng tôi bắt đầu đưa ra. Như các bạn cũng có thể biết, những thứ được cho xuống địa ngục mà chúng tôi đã ấn định phát hành trong tuần lễ của 11 tháng chín.
         Tháng trước, chúng tôi đã thảo luận về Windows XP hiện tại và tất cả các sáng kiến mang nó đến với thế giới hệ điều hành. Chúng bao trùm một số tính năng mới cho các lập trình viên như các tiện ích giao diện người dùng mới, cải tiến tự động chạy (autoplay),tính năng hội đồng side-by-side, và một số hệ thống API mới . Tháng này, chúng tôi sẽ hé lộ mặt nạ của Windows XP thêm một chút nữa, và hãy xem kỹ hơn tất cả các chờ đợi tiến bộ trong chiều sâu của hệ điều hành.
       Thật sự là rất nhiều thứ đó được cải thiện trong Windows XP. Bạn có thể tạo tập tin ánh xạ lớn hơn. Trình điều khiển thiết bị có thể lớn hơn. Các thiết lập được định nghĩa làm việc hiệu quả hơn, ít luận điểm bị khóa hơn. Đăng nhập, tính năng ngủ đông, và chạy nhanh hơn. Người quản lý bộ nhớ cache tốt hơn. Bạn có thể làm bản sao bóng khối. Driver mới kiểm tra các tùy chọn, cảnh báo người dùng nếu driver  của họ có thể nổ tung. Chúng ta có thể tiếp tục, ngày qua ngày, nhưng bạn sẽ nhận được ý tưởng. Nếu bạn không biết bất kỳ những thứ này, hoặc cần phải biết làm thế nào chúng sẽ giúp bạn làm công việc của bạn tốt hơn,hãy đọc chi tiết tính năng trên bài báo nội bộ cho Windows XP.
      Trong số mười một, chúng tôi cũng nói chuyện về Windows 64-bit và những gì nó có thể làm cho bạn. Một vài bạn đọc đã yêu cầu chúng tôi để biết thêm thông tin, khi nó sẽ được phát hành, bạn có thể nhận được phiên bản nào. Chúng tôi sẽ thảo luận về điều này trong Editor's Note cuối tháng, nhưng điều này dường như có vẻ như là thời gian tốt nhất để nhận được những plug đến chậm của chúng tôi. Để trả lời câu hỏi của bạn,Windows 64bit có sẵn ngay bây giờ! Nó có thể được tìm thấy (hoặc sẽ được cung cấp) trong bốn phiên bản khác biệt.

    
* Windows Advanced Server, Limited Edition có sẵn trong ngày hôm nay cho bộ vi xử lý 64-bit. Xem thêm thông tin có sẵn tại

http://www.microsoft.com/windows2000/64bit/default.asp
    * Windows XP Professional có sẵn vào ngày 25 tháng 10, trong cả hai 32 - và 64-bit (xem tại http://www.microsoft.com/windowsxp/64bit).
    * Windows Server 2003 đang trong phiên bản beta vào thời điểm phát hành. Thông thường đang lên kế hoạch cho nửa đầu năm 2002, nhưng chúng ta chỉ cần thực hiện các tạp chí. Sẽ có hai phiên bản của Windows Server 2003 có hỗ trợ 64-bit, nền tảng: Enterprise Server và Datacenter Server.

       Khi chúng tôi nói về nền tảng Windows 64-bit , nó không phải là lời đồn đại đầu tiên của một số công nghệ xa xôi. Các phiên bản Windows có sẵn ngày hôm nay, với các phiên bản khác đang được thử nghiệm cho bản phát hành trong tương lai không xa.
Bạn cũng có thể thấy rằng chúng tôi vẫn gọi George Shepherd’s Column là "The Column ASP". Vâng, chúng tôi đã thông báo cơ hội để gửi vào mục riêng của cột của bạn, và vâng, hàng trăm bạn đã cung cấp tên gọi cho chúng tôi. Vấn đề là, tất cả các bạn guys stink. Chúng tôi không đặt tên column "ASParagus" và chúng tôi không thay đổi tên thành "The charmer ASP". Nếu một trong những bạn không leo lên với một tên thực sự đầy cảm hứng, chúng tôi chỉ cần đặt tất cả các mục trong một cái phễu và chọn ngẫu nhiên một cái. Chúng tôi không đi theo "ASPaghetti" hoặc "GrASPing at Straws" hoặc có thể gặp những rắc rối lớn.

       Tiếp mục: Java đã trở lại! Chúng tôi đã chỉ được giao vào phút cuối-tin tức đó là một thành viên mới của nhóm sản phẩm Visual Studio. NET, Visual J # ™. NET, đã được phát hành đến các web ở dạng beta. Trong những năm qua, chúng tôi đã nhận được nhiều thư yêu cầu những gì NET Framework có ý nghĩa cho tương lai của Java. Với Visual J NET. #, ngôn ngữ Java bây giờ đang phát triển một nhóm của khoảng 20 ngôn ngữ khác mà có thể tận dụng đầy đủ của NET Framework.. Nếu bạn là một nhà phát triển ngôn ngữ Java có cảm giác rời khỏi thế giới. NET, bây giờ bạn có khả năng nâng cấp dự án Visual J + + 6,0 thành . NET. Chúng sẽ bao gồm Visual J # trong những tháng tới, nhưng hãy kiểm tra những thông tin mới nhất và  download bản Beta 1 tại :

http://msdn.microsoft.com/visualj/jsharp/beta.asp
      

          Vâng, đó là kinh doanh. Chúng tôi muốn cảm ơn tất cả độc giả, tác giả của chúng tôi, và bạn bè người đã gửi lời  khuyến khích chúng tôi trong những sự kiện sau vào ngày 11 tháng 9. Bất kì từ nào đó cố gắng truyền đạt ý nghĩa âm thanh. Một firehouse chỉ hai khối văn phòng của chúng tôi-Engine 54, Ladder 4. Bạn thấy các nhân viên cứu hỏa xung quanh khu phố toàn thời gian, quen thuộc với cộng đồng hiện diện. Và bạn vẫn có thể nhìn thấy chúng trong khu phố của nhiều người trong số họ được ăn trưa tại nơi mà chúng tôi cùng làm. Chỉ có mười hai người trong số họ ít hơn bây giờ. Đó là câu chuyện tương tự cho Engine 22, Ladder 13 - các Firehouse trên Upper East Side rằng điều này các biên tập viên đã trưởng thành cùng nó. Chín anh hùng đã mất đi. Đó là những gì nó giống như trong những láng giềng ở thành phố này.

 

Tác giả : —J.T

Link bài viết : http://msdn.microsoft.com/en-us/magazine/cc301658.aspx

Người dịch : Đỗ Văn Hiệp

Lớp K52A - Hóa học. Trường ĐHKHTN-ĐHQGHN

 

Top 10 Contributor
Male
Posts 176

Đáng tiếc đây là bài trên báo MSDN Magazine từ tháng 12 năm 2001. Bạn nên tìm đọc những bài báo số mới hơn, đặc biệt là những bài công nghệ lập trình để vừa học và vừa chia xẻ với cộng đồng tin học nhé.

 

Cheers!

Top 25 Contributor
Posts 28

Vâng! Cảm ơn anh đã góp ý.

Top 10 Contributor
Posts 38

Mình cũng nghĩ là nên tập trung vào chủ đề về lập trình,vì nó có tính ứng dụng thực tế cho công việc của bạn cả bây giờ cũng như sau này hơn.


Top 200 Contributor
Posts 2

Normal 0 false false false false EN-US X-NONE X-NONE

Định tuyến với ASP.NET Web form

Scott Allen

Mã nguồn có thể tải về từ

MSDN Code Gallery Browse the Code Online

http://i.msdn.microsoft.com/Global/Images/clear.gif

 

Định tuyến là gì ?

Lược sủ về sản sinh URL

Cách xử lí của bộ định tuyến.

Cấu hình định tuyến cho ASP.NET

Cấu hình bộ định tuyến.

Công thức xử li định tuyến.

Định tuyến và bảo mật.

Sản sinh URL

Định tuyến mở rộng.

Service Pack 1 của Microsoft .NET Framework 3.5 giới thiệu một kỹ thuật định tuyến trong ASP.NET runtime .Kỹ thuật định tuyến có thể tách riêng một URL trong một yêu cầu HTTP từ một Web Form vật lý trả về từ yêu cầu đó,cho phép bạn xây dựng một URL thân thiện cho ứng dụng Web của bạn .Mặc dù bạn vẫn có thể sử dụng các URL quen thuộc trong các phiên bản trước của ASP.NET,kỹ thuật định tuyến cung cấp một cách dễ dàng ,gọn gàng và hơn nữa là tiếp cận kiểm thử.Kỹ thuật định tuyến bắt đầu như là một phần của phần của mô hình MVC trong ASP.NET(Model View Controller),có thể tìm hiểu trước về mô hình này.Tuy nhiên, Microsoft đã đóng gói logic định tuyến trong thư viện System.Web.Routing và phát hành với SP1.Đây là một phần trực tiếp cung cấp định tuyến cho Webside sử dụng ASP.NET Dynamic Data trong tương lai(cũng được phát hành cùng SP1),nhưng trong phần này tôi sẽ trình bày cách làm thế nào để sử dụng chức năng định tuyến với ASP.NET Web Forms.

Định tuyến là gì ?

Hãy tưởng tượng bạn có một ASP.NET Web Form đặt tên RecipeDisplay.aspx,và form này được đặt trong thư mục tên Web Forms. Phương pháp cổ điển để xem một  webform này là xây dựng một URL trỏ tới vị trí vật lý của form và mã hóa một số dữ liệu vào chuỗi truy vấn để gọi  các  webform hiển thị. Cuối của URL như vậy có thể xem như sau: / WebForms / RecipeDisplay.aspx? Id = 5, trong đó số 5 đại diện cho một giá trị chính của khóa trong một bảng cơ sở dữ liệu đầy đủ .

Định tuyến về cơ bản là phân hủy một điểm cuối URL vào các thông số và sau đó sử dụng những tham số để chỉ đạo việc xử lý yêu cầu HTTP tới một thành phần cụ thể. Hãy xem URL / recipe / 5 là một ví dụ. Với cấu hình định tuyến thích hợp, bạn vẫn có thể đáp ứng với URL này với   form “RecipeDisplay.aspx”.

URL không còn đại diện cho một  đường dẫn vật lý. Thay vào đó, các công thức  thể hiện cho một tham số mà các kỹ thuật định tuyến có thể sử dụng để định vị một thành phần để xử lý các yêu cầu của công thức. Số 5 tượng trưng cho một tham số thứ hai bạn sẽ cần trong quá trình xử lý để hiển thị theo một công thức cụ thể. Thay vì mã hóa các khóa cơ sở dữ liệu vào URL, một ý tưởng tốt hơn có thể là sử dụng một URL như sau “/công thức/số”. URL này không chỉ bao gồm các thông số đủ để hiển thị theo công thức cụ thể, nhưng cũng đủ để có thể đọc và minh họa  cho người dùng cuối, và bao gồm các từ khoá quan trọng cho công cụ tìm kiếm để xem.

Lược sử URL Rewriting

Trong ASP.NET, bằng cách sử dụng một URL kết thúc với định dạng:” /công thức/số” để sản sinh ra một URL bằng cách truyền thống. Để biết thông tin chi tiết về sản sinh ra URL , xem bài viết của Scott Mitchell's với nhan đề "URL Rewriting in ASP.NET." Bài báo mô tả việc thực hiện sản sinh URL một cách phổ biến trong ASP.NET  ,bằng cách sử dụng một mô-đun HTTP và phương thức tĩnh RewritePath của lớp HttpContext. Bài viết Scott cũng nói chi tiết các điều phối URL một cách thân thiện.

Trong chúng ta  những ai đã sử dụng API RewritePath trong quá khứ có lẽ là quen thuộc với một số các quirks và weaknesses trong các phương thức sản sinh. Vấn đề chính với RewritePath là cách thức thay đổi đường dẫn ảo sử dụng trong việc xử lý yêu cầu. Với việc sản sinh URL , bạn cần thiết để sửa phản hồi trở lại lên đích của mỗi web form (thường được sản sinh URL được thực hiện thứ hai trong một thời gian yêu cầu) để tránh phàn hồi trở lại đến nội bộ  URL.
Ngoài ra, hầu hết các nhà phát triển sẽ thực hiện sản sinh URL  như một cách dịch vì không có cơ chế dễ dàng để cho sản sinh URL  làm việc logic trong hai hướng. Ví dụ, nó được dễ dàng để cho  sản sinh URL logic một công đối mặt với URL và có logic trở về URL nội bộ của một web form. Rất khó để đưa ra logic sản sinh URL nội bộ của một web form và để nó trở về URL công cộng cần thiết để đạt được các form. Loại thứ hai là hữu ích khi tạo liên kết đến các web khác phương  thức  ẩn đằng sau các URL được sản sinh. Như bạn sẽ thấy trong phần còn lại của bài này, các ki thuật định tuyến  URL sẽ gặp những vấn đề này .


Hình 1 :  Bộ định tuyến,cách xử lý,module định tuyến.

Bộ định tuyến và cách xử lý.

Có ba yếu tố cơ bản trong kỹ thuật định tuyến URL: các bộ định tuyến,cách xử lý định tuyến , và các mô-đun định tuyến.Một bộ tuyến gồm: một URL với một lộ trình xử lý. Một ví dụ của lớp định tuyến từ  không gian tên System.Web.Routing đại diện cho một lộ trình trong thời gian chạy ,mô tả các tham số và những uy tắc ràng buộc của nó. Một lộ trình xử lý kế thừa từ thư viện System.Web.Routing.IRouteHandler. Thư viện này yêu cầu xử lý lộ trình để thực hiện một phương pháp GetHttpHandler  trả về một đối tượng thực hiện các giao diện IHttpHandler. Giao diện IHttpHandler đã là một phần của ASP.NET kể từ đầu, và một web form (một System.Web.UI.Page) là một IHttpHandler. Khi sử dụng định tuyến với Web Forms, lộ trình xử lý của bạn cần phải xác định vị trí, nhanh chóng trả lại web form phù hợp. Cuối cùng, định tuyến module cắm vào trong dẫn xuât ASP.NET để xử lý. Module này sẽ ngăn chặn yêu cầu gửi đến, kiểm tra các URL, và kiểm tra nếu có các lộ trình không phù hợp với quy định. Module này sẽ lấy xử lý định tuyến liên kết cho một lộ trình phù hợp và yêu cầu xử lý giao việc định tuyến cho IHttpHandler .

Cấu hình định tuyến cho ASP.NET

Để cấu hình định tuyến cho một web site ASP.Net hoặc một ứng dụng Web,điều đầu tiên bạn cần là thêm một tham chiếu tới thư viện hệ thống có tên System.Web.Routing.Trong khi cài đặt bản .NET Framework 3.5 sẽ thêm thư viện này vào bộ nhớ cache và bạn có thể tìm thấy thư viện này trong hộp thoại "Add Reference".

Bạn cũng sẽ cần phải cấu hình module định tuyến vào trong các dẫn xuất ASP.NET. Module định tuyến là một module HTTP tiêu chuẩn. Cho IIS 6.0 và trước đó và cho máy chủ phát triển Visual Studio Web, bạn cài đặt các mô-đun bằng cách sử dụng phần <httpModules> của web.config, như bạn thấy ở đây:

<httpModules>      
    <add name="RoutingModule" 
         type="System.Web.Routing.UrlRoutingModule, 
               System.Web.Routing, 
               Version=3.5.0.0, Culture=neutral, 
               PublicKeyToken=31bf3856ad364e35"/>
    <!-- ... --> 
</httpModules>

Để chạy một trang web với việc định tuyến trong IIS 7.0, bạn cần hai mục trong web.config. Mục nhập đầu tiên là cấu hình mô-đun định tuyến, được tìm thấy trong phần <modules> của <system.webServer>. Bạn cũng cần thêm một phần để xử lý yêu cầu UrlRouting.axd trong phần <handlers> của <system.webServer>. Cả hai mục được hiển thị trong hình 2. Ngoài ra, xem thanh bên "mục Cấu hình IIS 7.0 "

Hình 2  :  Cấu hình module định tuyến URL

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule"
             type="System.Web.Routing.UrlRoutingModule, 
                   System.Web.Routing, Version=3.5.0.0, 
                   Culture=neutral, 
                   PublicKeyToken=31BF3856AD364E35" />
      <!-- ... -->
     </modules>
    <handlers>
      <add name="UrlRoutingHandler"
            preCondition="integratedMode"
            verb="*" path="UrlRouting.axd"
            type="System.Web.HttpForbiddenHandler, 
                  System.Web, Version=2.0.0.0, Culture=neutral, 
                  PublicKeyToken=b03f5f7f11d50a3a" />
      <!-- ... -->
    </handlers>
</system.webServer> 

Một khi bạn đã cấu hình module định tuyến URL vào trong dẫn xuất , nó sẽ có mối liên hệ giữa PostResolveRequestCache và các sự kiện PostMapRequestHandler. Hình 3 cho thấy một tập hợp của những sự kiện được dẫn xuất. URL  được thực hiện viết lại trong sự kiện yêu cầu đầu tiên(BeginRequest), đó là sự kiện được thực thi sớm nhất thời gian yêu cầu. Với định tuyến URL, các địa chỉ kết hợp và lựa chọn của một lộ trình xử lý xảy ra trong giai  PostResolveRequestCache, sau đó là các giai đoạn xác thực, uỷ quyền, và tra cứu bộ nhớ cache  của quá trình xử lí. Tôi sẽ cần phải vào lại các tác động của sự kiện này thời gian sau đó trong mục.


Hình 3 : Yêu cầu xử lý của HTTP

Cấu hình cho bộ định tuyến

Bộ định tuyến và xử lý định tuyến nằm trong tầm tay,nhưng tôi sẽ xem đoạn Code cấu hình bộ định tuyến đầu tiên. Routes là một thuộc tính tĩnh nằm trong lớp RouteTable trong một tập hợp các Route. Bạn cần phải cấu hình tất cả các định tuyến riêng của bạn vào tập hợp này trước khi bắt đầu thực hiện các yêu cầu đầu tiên, có nghĩa là bạn cần phải sử dụng một tập tin global.asax và sự kiện Application_Start.

protected void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes();
}
 
private static void RegisterRoutes()
{
    RouteTable.Routes.Add(
        "Recipe",
        new Route("recipe/{name}", 
                  new RecipeRouteHandler(
                      "~/WebForms/RecipeDisplay.aspx")));
}

Hình 4 : Đoạn mã mà Bộ định tuyến thực hiện việc lưu giữ lại công thức định tuyến.

Hình 4 cho thấy đoạn mã đăng ký định tuyến mà bạn cần phải sử dụng cho "/ công thức / các tham số" để truy cập được form “RecipeDisplay.aspx”. Các tham số cho các  phương pháp thêm vào trên lớp RouteCollection bao gồm một tên quen thuộc cho định tuyến này, theo sau là định tuyến riêng của mình. Tham số đầu tiên để các xây dựng một bộ định tuyến là một URL. Mô hình này bao gồm các phân đoạn URL mà nó sẽ xuất hiện ở phần cuối của một URL trỏ tới ứng dụng này (sau khi bất kỳ phân đoạn nào cần thiết để truy cập được tới thư mục gốc của ứng dụng .Đối với một ứng dụng được đặt trong thư mục gốc : localhost / food/recipe/brownies, các tuyến đường mẫu trong hình 4 sẽ phù hợp localhost / food/recipe/brownies.

Cấu hình các hạng mục cho IIS 7.0

Để chạy tất cả các module quản lý cho tất cả các yêu cầu đòi hỏi một giá trị thật sự nếu bạn muốn sử dụng các URL mở rộng như tôi đã làm việc trong ví dụ này. Ngoài ra, nó có vẻ lạ để cấu hình một HTTP handler cho tập tin UrlRouting.axd. Đây là một lỗi nhỏ tạm thời yêu cầu phải dùng đến kĩ thuật định tuyến để làm việc theo IIS 7.0. Module UrlRouting thực sự được ghi đè lên URL được gửi tới tập tin ~ / UrlRouting.axd,sau đó sẽ ghi đè trở lại URL ban đầu đến. Có khả năng là một phiên bản tương lai của IIS sẽ được tích hợp với bộ định tuyến hoàn hảo hơn và không yêu cầu sửa lỗi tạm này.

Phân đoạn kèm theo bên trong dấu ngoặc nhọn biểu thị các thông số, và kĩ thật định tuyến sẽ tự động giải nén các giá trị đó và đặt chúng vào một cái tên / giá trị của bộ từ điển mà nó sẽ tồn tại trong suốt thời gian yêu cầu. Sử dụng các ví dụ trước của localhost / thức ăn / thức / brownies,bộ định tuyến sẽ được trích xuất các giá trị "brownies" và lưu giá trị trong từ điển với một khóa của "tên". Bạn sẽ thấy cách sử dụng từ điển khi tôi nhìn vào mã cho các xử lý định tuyến .

Bạn có thể thêm nhiều định tuyến nếu bạn cần vào RouteTable, nhưng sắp xếp của các tuyến đường là rất quan trọng.Bộ định tuyến sẽ kiểm tra tất cả các URL đến trở lại các định tuyến trong bộ sưu tập theo thứ tự mà ở đó chúng xuất hiện, và bộ định tuyến sẽ chọn tuyến đầu tiên với một mô hình phù hợp. Vì lý do này, bạn nên thêm các định tuyến  cụ thể nhất ngay lần đầu tiên. Nếu bạn thêm một tuyến đường chung với các mẫu URL "(danh mục) / (danh mục con)" trước khi các công thức định tuyến thì bộ định tuyến sẽ không bao giờ tìm được lộ trinh theo công thức. Một lưu ý bổ sung - các bộ định tuyến thực hiện các mô hình kết hợp trong trường hợp một cách vô thức.

Phiên bản đã bỏ qua trước đây của các các bộ định tuyến cho phép bạn tạo các giá trị tham số mặc định và áp dụng những quy tác ràng buộc. Mặc định cho phép bạn chỉ định các giá trị mặc định cho các bộ định tuyến để đặt thành “tên “/ “giá trị tham số từ điển” khi giá trị không tồn tại cho tham số trong một URL đến. Ví dụ, bạn có thể làm cho "brownies" tên công thức mặc định khi bộ định tuyến thấy một URL theo một công thức mà không có một giá trị tên (như like localhost/food/recipe).

Ràng buộc cho phép bạn xác định biểu thức thông thường để xác nhận các thông số và điều chỉnh các mẫu định tuyến kết hợp các URL đến. Nếu bạn đang sử dụng các giá trị chính khoá để xác định các công thức định tuyến trong một URL (như localhost/food/recipe/5), bạn có thể sử dụng một công thức phổ biến để đảm bảo giá trị chính khóa trong URL là một số nguyên. Bạn cũng có thể áp dụng những ràng buộc sử dụng một đối tượng thực hiện các giao diện IRouteConstraint.
Tham số thứ hai để các xây dựng bộ định tuyến là một ví dụ mới về xử lý tuyến đường của tôi, mà tôi sẽ xem xét trong hình 5.

public class RecipeRouteHandler : IRouteHandler
 {
     public RecipeRouteHandler(string virtualPath)
     {
         _virtualPath = virtualPath;
     } 
     public IHttpHandler GetHttpHandler(RequestContext requestContext)
     {
         var display = BuildManager.CreateInstanceFromVirtualPath(
                         _virtualPath, typeof(Page)) as IRecipeDisplay; 
         display.RecipeName = requestContext.RouteData.Values["name"] as string;
         return display;
     }
     string _virtualPath;
 }

Hình 5 : Công thức xử lí định tuyến

Các công thức xử lí định tuyến.
Đoạn mã sau đây cho thấy một cơ bản việc cài đặt định tuyến h để xử lý các công thức yêu cầu. Kể từ khi xử lý định tuyến cuối cùng đã tạo ra một thể hiện của một IHttpHandler (trong trường hợp này, RecipeDisplay.aspx), các yêu cầu xây dựng một đường dẫn ảo chỉ vào webform được bộ định tuyến sẽ tạo ra. Phương thức GetHttpHandler vượt qua  đường dẫn  ảo đến ASP.NET BuildManager để lấy web form được cài đặt:

interface IRecipeDisplay : IHttpHandler
{
    string RecipeName { get;  set; }
}

 Thông báo lộ trình xử lý như thế nào cũng có thể kéo dữ liệu từ điển thông số động cơ của việc định tuyến, RouteData là một thuộc tính của lớp RequestContext. Các bộ định tuyến thiết lập RequestContext và vượt qua một ví dụ khi gọi phương pháp này. Có nhiều tùy chọn sẵn có cho nhận được dữ liệu trên đường vào Web form. Bạn có thể vượt qua dữ liệu định tuyến dọc theo bộ sưu tập HttpContext Item, ví dụ. Trong ví dụ này, bạn đã xác định một giao diện cho  web form của bạn để thực hiện (IRecipeDisplay). Xử lý định tuyến có thể thiết lập các thuộc tính mạnh mẽ  trên web form để vượt qua bất kỳ thông tin cùng các web form yêu cầu, và cách tiếp cận này sẽ làm việc với cả Web site ASP.NET và kiểu biên tập các ứng dụng ASP.NET.

Định tuyến và Bảo mật
Khi bạn đang sử dụng định tuyến ASP.NET, bạn vẫn có thể sử dụng tất cả các tính năng ASP.NET bạn đã đến các tính năng yêu thích như : Master Pages, xuất ra bộ nhớ đệm, themes,user control, và nhiều hơn nữa. Tuy nhiên có một ngoại lệ đáng chú ý. Module định tuyến sử dụng các sự kiện của nó bằng cách sử dụng các  dẫn xuất xảy ra sau khi thẩm định và ủy quyền của các giai đoạn xử lý, nghĩa là ASP.NET sẽ được cho phép người dùng của bạn sử dụng chung, URL sẽ được tham chiếu và đường dẫn ảo với tới Web Form ASP.NET sẽ bị ẩn đi khi bộ định tuyến được chọn để xử lý yêu cầu. Bạn cần phải chú ý cẩn thận để các chiến lược ủy quyền cho một ứng dụng có sử dụng định tuyến.
Hãy nói rằng bạn muốn chỉ cho phép người dùng xem công thức khi đã được xác thực . Một cách tiếp cận là sẽ sửa đổi web.config gốc để sử dụng các thiết lập ủy quyền như ở đây:

<location path="recipe">
  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>
</location>

Mặc dù phương pháp này sẽ ngăn cản người dùng nặc danh cho xem / recipe / Tacos, nó có hai điểm yếu cơ bản. Trước tiên, các thiết lập này không ngăn chặn một người sử dụng trực tiếp yêu cầu / WebForms / RecipeDisplay.aspx (mặc dù bạn có thể thêm một quy tắc ủy quyền có thể ngăn chặn tất cả người dùng trực tiếp yêu cầu nguồn từ thư mục Web Forms). Thứ hai, nó rất dễ thay đổi cấu hình tuyến đường trong global.asax.cs mà không thay đổi các quy tắc ủy quyền và để lại cấu hình định tuyến trong file global.asax.cs mà không có các quy tắc ủy quyền của bạn và mở cho người dùng nặc danh .

Một cách tiếp cận khác để ủy quyền sẽ được bảo vệ các trang RecipeDisplay.aspx cơ bản dựa trên địa điểm vật lý của nó, mà là để đặt file web.config với thiết lập <authorization> trực tiếp vào thư mục được bảo vệ. Tuy nhiên, kể từ ASP.NET là cho phép người sử dụng dựa vào URL công cộng, bạn sẽ cần phải thực hiện các phép kiểm tra bằng tay trên đường dẫn ảo mà bạn sử dụng để xử lý định tuyến .Bạn sẽ cần phải thêm mã sau vào đầu của phương thức xử lý GetHttpHandler  cho xử lý định tuyến của bạn. Mã này sử dụng phương thức tĩnh CheckUrlAccessForPrincipal của lớp UrlAuthorizationModule (module tương tự thực hiện kiểm tra ủy quyền trong các dẫn xuất ASP.NET):

if (!UrlAuthorizationModule.CheckUrlAccessForPrincipal(
    _virtualPath, requestContext.HttpContext.User,
                  requestContext.HttpContext.Request.HttpMethod))
{
    requestContext.HttpContext.Response.StatusCode = 
        (int)HttpStatusCode.Unauthorized;
    requestContext.HttpContext.Response.End(); 
}

 Để truy cập các thành phần HttpContext qua RequestContext, bạn sẽ cần phải thêm một tham chiếu đến thư viện hệ thống System.Web.Abstractions.
Với một xử lý định tuyến an toàn tại chỗ, bây giờ bạn có thể chuyển sự chú ý của bạn vào trang mà cần tạo ra các siêu liên kết cho mỗi công thức trong cơ sở dữ liệu của bạn. Nó cũng chỉ ra logic định tuyến có thể giúp bạn xây dựng trang này.

Sự sản sinh URL .
Để tạo các siêu liên kết đến bất kỳ công thức nào đó, tôi lại một lần nữa sẽ chuyển đến bộ sưu tập của các bộ định tuyến trong thời gian khởi động ứng dụng. Như được hiển thị ở đây, các lớp RouteCollection có một phương pháp GetVirtualPath cho mục đích này:

VirtualPathData pathData = 
    RouteTable.Routes.GetVirtualPath(
                  null,
                  "Recipe",
                  new RouteValueDictionary { { "Name", recipeName } });
 
return pathData.VirtualPath;

Bạn cần phải vượt qua trong bộ định tuyến mong muốn tên dài  ( "Recipe") cùng với một từ điển của các tham số yêu cầu và giá trị liên quan của nó. Phương pháp này sẽ sử dụng các mẫu URL bạn đã tạo trước đó (/ công thức / (tên)) để xây dựng URL thích hợp.
Các mã sau sử dụng phương pháp này để tạo ra một bộ sưu tập của các đối tượng đồng bộ. Các đối tượng có tên và thuộc tính Url mà bạn có thể sử dụng với dữ liệu ràng buộc để tạo ra một danh sách hoặc bảng công thức có sẵn:

var recipes = 
    new RecipeRepository()
        .GetAllRecipeNames()
        .OrderBy(recipeName => recipeName)
        .Select(recipeName =>
          new
          {
            Name = recipeName,
            Url = GetVirtualPathForRecipe(recipeName)
          });

Khả năng tạo ra các URL từ cấu hình định tuyến của bạn có nghĩa là bạn có thể thay đổi cấu hình mà không có sự lo ngại của việc tạo ra các liên kết hỏng trong ứng dụng của bạn. Tất nhiên, bạn vẫn có thể phá vỡ các liên kết và đánh dấu trang yêu thích của người dùng của bạn, nhưng có khả năng thay đổi là một lợi thế lớn lao khi bạn vẫn còn thiết kế cấu trúc URL của ứng dụng.

 Định tuyến mở rộng.
Bất kỳ bộ định tuyến URL nào tất cả các công việc bẩn kết hợp mẫu URL và thế hệ URL. Tất cả bạn cần làm là cấu hình các tuyến đường và thực hiện xử lý lộ trình của bạn. Với việc định tuyến, bạn đang thực sự bị cô lập từ phần mở rộng file và bố trí bề mặt vật lý của các tập tin hệ thống của bạn, và bạn không cần phải đối phó với các quirks của việc sử dụng một  URL. Thay vào đó, bạn có thể tập trung vào việc thiết kế URL tối ưu cho người dùng cuối của bạn và cho công cụ tìm kiếm. Ngoài ra, Microsoft đang làm việc trên làm cho việc định tuyến URL với Web Forms dễ dàng hơn và nhiều cấu hình hơn nữa trong ASP.NET 4,0 sắp tới.
Gửi câu hỏi của bạn và ý kiến tới  xtrmasp@microsoft.com.
Scott Allen là một người sáng lập OdeToCode và là thành viên của đội ngũ nhân viên kỹ thuật Pluralsight. Bạn có thể tiếp cận với Scott tại scott@odetocode.com, hoặc đọc blog của anh ấy tại OdeToCode.com / blog / scott.

Page 1 of 1 (5 items) | RSS