前者的實時反應功能之強大,已經很為人所知了,但由網上的搜尋結果和CodePlex所見,後者可能比較"受冷落"。
傳統的Webforms都是*.aspx做Extension,到了ASP.NET 4.0雖然原生支援RESTful URLs,但老實說,似乎Webforms的開發者不太熱衷於它,即使我自己都不強求。
跟ASP.NET MVC不同,MVC是強制性要求做URL routing,但Webforms則是選擇性質,維護Global.asax的Routing Tables亦挺煩的,最主要或者Webforms開發者都習慣了QueryString (product.aspx?id=12) 的方式取Parameter了。
可以參考Wikipedia - Clean URL
顧名思義,Friendly URLs framework,就是把傳統*.aspx的Extension拿掉,可以很簡單地就做到
示範
來看看簡短的示範 :
1. 安裝Visual Studio 2012 Update 2之後,新建一個Web Project。
2. 什麼都不用修改,直接按"F5"執行Project。起動後,按下網面上的連結 (關於 / 連絡人),之後看看IE的網址列,已經是RESTful URL了! 它直接指向你的About.aspx和Contact.aspx !
沒錯,Friendly URLs framework已經是Webforms Project Template的預設成員,打開Reference看一看,就會見到Microsoft.AspNet.FriendlyUrls的NameSpace了。
其實Template已經替你做了一些功夫,打開Global.asax看看Application_Start()部份,就會看到這行 :
RouteConfig.RegisterRoutes()
public class Global : HttpApplication { void Application_Start(object sender, EventArgs e) { // 應用程式啟動時執行的程式碼 RouteConfig.RegisterRoutes(RouteTable.Routes); } }
打開App_Start資料夾的RouteConfig.cs,就會見到最關鍵的方法 - EnableFriendlyUrls()
using Microsoft.AspNet.FriendlyUrls; public static class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.EnableFriendlyUrls(); } }
EnableFriendlyUrls()並不是RouteCollection 原生的方法,它是Microsoft.AspNet.FriendlyUrls所產生的Extension Methods。
所花的功夫就是那麼少,加上幾句便成。
建立RESTful Url
若我要建立一條RESTful URL,例如
http://localhost:56046/About/Blog/12
方法很簡單,使用FriendlyUrl.Href()方法 :
<%@ Import Namespace="Microsoft.AspNet.FriendlyUrls" %> <a href="<%: FriendlyUrl.Href("~/About", "Blog", 12) %>">I am Restful!</a>
Request.QueryString
那麼如何取得Url的Parameter呢?
無論Webform還是MVC,RESTful URL是沒有"?category=Blog&postid=12" 這樣式,雖然你依然可以這樣做,程式上是容許的。
但就有點兒破格了。
以剛剛的About頁做例子,URL應該寫做" /About/Blog/12"
那取出網址部份的程式碼如下 :
using Microsoft.AspNet.FriendlyUrls; namespace WebApplication1 { public partial class About : Page { protected void Page_Load(object sender, EventArgs e) { Response.Write("<ol>"); foreach (var segment in Request.GetFriendlyUrlSegments()) Response.Write("<li style='color:red;font-size:18px;'>" + segment.ToString() + "</li>"); Response.Write("</ol>"); if (FriendlyUrl.Segments.Count > 2) { Response.Write("<ul>"); Response.Write("<li style='color:red;font-size:18px;'>" + FriendlyUrl.Segments[0] + "</li>"); Response.Write("<li style='color:red;font-size:18px;'>" + FriendlyUrl.Segments[1] + "</li>"); Response.Write("</ul>"); } } } }
可以使用Request.GetFriendlyUrlSegments()得到List<string>的值,或者直接使用FriendlyUrl.Segments以zero-indexed型式取出。
記得ASP.NET MVC推出時,很多人擔心Microsoft會放棄Webforms,但現在看來不用擔心。
Microsoft把MVC的功能都移植到Webforms了。
沒有留言:
發佈留言