WebForm開發中的路由功能

來源:互聯網
上載者:User
前言

在System.Web.Routing命名空間中存在著這麼一個對象,能夠實現傳統webform開發下的路由功能:RouteTable,實際上ASP.NET MVC架構也是依賴於此的。本篇就講講在傳統webform開發中如何?url rewrite功能(以前要實現這功能,那是相當的…)

 

入題
下面以新聞查看為sample,比如,原先傳統webform開發,大多是如下的url方式:http://xxxx/newsdetail.aspx?newsId=100,如今,通過路由功能,能很方便的實現轉換成SEO友好的方式,如:http://xxxx/news/新聞標題, 對於搜尋引擎和人類來說可是相當友好了。簡單的代碼分成如下兩步:

進入Global中定義路由

void Application_Start(object sender, EventArgs e)        {            RouteTable.Routes.MapPageRoute("r1", "news/{uid}", "~/NewsDetail.aspx");        }

 在NewsDetail.aspx檔案中使用新的路由參數

<head runat="server">    <title><%=NewsTitle%> - Aaron</title></head><body>    <form id="form1" runat="server">    <div>        <strong><%=NewsTitle%></strong>    </div>    </form></body>

 

public partial class NewsDetail : System.Web.UI.Page    {        public string NewsTitle { get; set; }        protected void Page_Load(object sender, EventArgs e)        {            this.NewsTitle = string.Format("新聞標題 {0}", this.RouteData.Values["uid"]);        }    }

 

運行效果如:

 

 現在直接存取具體的新聞是可以了,但是如果使用者只輸入http://localhost:3742/news呢?就報錯啦(因為這個url格式不符合路由,因此報404錯誤):

有2個辦法,要麼增加一條路由記錄,要麼為目前這條路由設定預設值,我們來看設定預設值得方式吧:

var defaults = new RouteValueDictionary { { "uid", "預設新聞" } };            RouteTable.Routes.MapPageRoute("r1", "news/{uid}", "~/NewsDetail.aspx", false, defaults);

 

此時通過這麼一Compile,再訪問http://localhost:3742/news, 就不會報錯了,如:

 

上面說到的路由,除了url外,還有個參數uid,對於NewsDetail.aspx中的代碼來說,也就這麼一個uid參數,但是,假如我想加入一些固定的參數配置呢?比如:打算做一次email營銷,要統計因為email營銷而得到的訪問量,我們就這樣做吧(下面這個做法不專業,只是講解路由參數的用法):

修改Global代碼,給email營銷渠道增加相應的路由設定、為新渠道設定固定參數source為"渠道A":

void Application_Start(object sender, EventArgs e)        {            var defaults = new RouteValueDictionary { { "uid", "預設新聞" } };            RouteTable.Routes.MapPageRoute("r1", "news/{uid}", "~/NewsDetail.aspx", false, defaults);            var dataTokens = new RouteValueDictionary { { "source", "渠道A" } };            RouteTable.Routes.MapPageRoute("r2", "newsTuiGuang001/{uid}", "~/NewsDetail.aspx", false, defaults, null, dataTokens);        }

 

修改NewsDetail.aspx.cs,讓代碼能夠處理這個新增的source參數:

public partial class NewsDetail : System.Web.UI.Page    {        public string NewsTitle { get; set; }        protected void Page_Load(object sender, EventArgs e)        {            this.NewsTitle = string.Format("新聞標題 {0}", this.RouteData.Values["uid"]);            if (this.RouteData.DataTokens["source"] != null)            {                this.NewsTitle += "------來源:推廣渠道" + this.RouteData.DataTokens["source"];            }        }    }

 

編譯,運行:

搞定,哈哈,從代碼中得知,固定參數的傳遞是通過RouteData.DataTokens數組來傳遞的。

大家要是對路由映射有興趣,就看看蔣金楠(Artech)的部落格吧:http://www.cnblogs.com/artech/archive/2012/03/20/aspnet-routing-02.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.