Rewrite Url website với Asp.net Routing

Asp.net Routing được giới thiệu là một trong những tính năng quan trọng trong Asp.Net MVC, hỗ trợ việc mapping các yêu cầu của trình duyệt đến một MVC Controller cụ thể, và thật tuyệt là nó cũng có thể áp dụng trong Asp.net Webform, và chúng ta có thể sử dụng chính nó để thực hiện rewrite url. Và không dài dòng, các bạn hãy xem một ví dụ nhỏ sau là có thể hiểu cơ chế làm việc và những gì nó mang lại.

- Hãy tạo một projet mới, sau đó thêm các file như cấu trúc sau.

- Mở file Global.asax và thêm mã giống như sau.

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>

<script runat="server">
    void RegisterRoutes(RouteCollection routes)
    {
        routes.MapPageRoute("home", "", "~/Default.aspx");
        routes.MapPageRoute("about", "about-us", "~/AboutUs.aspx");
        routes.MapPageRoute("article", "article/{nameEn}-{id}", "~/Article.aspx");
    }
    
    void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup
        RegisterRoutes(RouteTable.Routes);
    }
    
    void Application_End(object sender, EventArgs e) 
    {
        //  Code that runs on application shutdown

    }
        
    void Application_Error(object sender, EventArgs e) 
    { 
        // Code that runs when an unhandled error occurs

    }

    void Session_Start(object sender, EventArgs e) 
    {
        // Code that runs when a new session is started

    }

    void Session_End(object sender, EventArgs e) 
    {
        // Code that runs when a session ends. 
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer 
        // or SQLServer, the event is not raised.

    }
       
</script>

- Các bạn chú ý để sử dụng Asp.Net Routing, cần import thư viện system.web.routing. Hàm RegisterRoute có nhiệm vụ mapping các đường dẫn được gọi trong sự kiện Application_Start. Tiếp theo các bạn mở file Default.aspx thêm đoạn mã sau.

<ul>
                <li><a href="/">Home</a></li>
                <li><a href="/about-us">About Us</a></li>
                <li><a href="/article/aspnet-routing-and-url-rewrite-12">Asp.net Routing & Rewrite URL</a></li>
            </ul>

- Khi click vào mỗi đường link ở trên, Asp.net routing sẽ có nhiệm vụ dựa vào các quy tắc đã được khai báo trong RegisterRoute để trả về các file *.aspx tương ứng cho các bạn. Để lấy các tham số động "dynamic" được truyền trên url (ở đây chú ý thường thì các url đến trang tin tức thì sẽ có tham số id & tiêu đề không có định) ta sử dụng RouteData.Values["id"] thay cho Resquest.Querystring["id"] thông thường.

string nameEn = RouteData.Values["nameEn"].ToString();
string id = RouteData.Values["id"].ToString();

- Như vậy là bạn đã có thể chủ động rewrite url cho website của mình một cách chủ động mà không cần phụ thuộc vào bất cứ dll của bên thứ 3 nào. Bạn có thể thêm một số quy tắc trong hàm RegisterRoute ở file Global.asax để áp dụng cho website của bạn. Hoặc download mã nguồn của ví dụ này ở file đính kèm để xem được rõ hơn.

- Trong một số trường hợp khi đưa website lên host, url rewrite sẽ không hoạt động mà trả về lỗi 404. Các bạn hãy thêm đoạn mã sau vào webconfig là được

<system.webServer>   
    <modules runAllManagedModulesForAllRequests="true">    
        <remove name="UrlRoutingModule"/>
        <add name="UrlRoutingModule" 
             type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </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>

 

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

Download Source

Related Post


Less CSS for .NET
Friday, September 27, 2013
LESS là một CSS framework rất hay, nó giúp các nhà phát triển web tiết kiệm thời gian, đồng thời cũng làm cho các đoạn mã CSS dễ dàng quản lý và sử dụng lại hơn. Ở bài trước tôi đã giới thiệu đến các bạn về cách sử dụng Less để viết CSS một cách khoa học. Ở bài này chúng ta sẽ tìm hiểu thêm một dll có tên dotLess, nó được phát triển riêng dành cho Asp.Net và khắc phục được một số nhược điểm mà Less gặp phải
Detect Mobile Browsers
Monday, September 16, 2013
Với xu hướng phát triển mạnh mẽ của các thiết bị di động cầm tay như smartphone & tablet ở giai đoạn hiện, việc phát triển web dành riêng cho mobile đã trở thành một nhu cầu khá phổ biến. Với các website phát triển sau này, các nhà phát triển thường chọn xu hướng thiết kế responsive. Tuy nhiên với những website đã có từ trước hoặc dữ liệu lớn, các nhà phát triển sẽ chọn phương án xây dựng một  module độc lập dành riêng cho thiết bị mobile....
Search

Đăng ký nhận bài mới


Category

Blog Archive