ASP.NET MVC CodePlex Preview 4 Release Notes
您可以從這裡下載到該文檔:http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=15389。
翻譯:Anders Liu
摘要:本文檔描述了ASP.NET MVC架構的Preview 3與目前的CodePlex Preview 4之間的差別。還介紹了要運行新的發布版,你必須對現有的MVC應用程式進行的修改。
- 簡介
- What’s New
- 預設項目模板中的簡單成員資格特性
- 用於授權和異常處理的過濾器類型
- 輸出緩衝過濾器
- ASP.NET AJAX的變化
- 路由的命名空間
- TempData的增強可測試性介面
- ActionInvoker可擴充改進
- ViewDataDictionary
- MVC的未來
- 將現有的Preview3應用程式升級到Preview 4 CodePlex Release
- 已知問題
簡介
CodePlex Preview 4的發布包含了很多新的特性,並對預設項目模板進行了修改。對預設項目模板進行修改的目的是協助啟動最常見的應用程式構建情境。很多新特性都集中在簡單的AJAX情境上。
What’s New
這一部分介紹了該發布版中新的和修改過的特性。
預設項目模板中的簡單成員資格特性
很多Web應用程式都需要某種形式的使用者驗證。該發布版在預設項目模板中包含了一個AccountController類,用於處理下面這些使用者操作:
預設項目模板的Web.config檔案中包含了對MembershipProvider類的配置。這意味著當首次訪問成員資格特性時,ASP.NET會自動建立一個SQL Server Express Edition成員資格資料庫。你可以將SQL Server Express Edition資料庫轉換為SQL Server資料庫,或修改Web.config檔案中的連接字串,使其指向一個現有的包含成員資格表的資料庫。
預設範本中還包含Microsoft ASP.NET AJAX指令檔的一個副本。我們一直在持續地為MVC版的ScriptManager控制項進行工作;例如,我們使註冊包含在嵌入資源中的指令碼更加容易。然而,這些改進沒有包含在這個發布版中。
用於授權和異常處理的過濾器類型
該發布版包含兩種新的過濾器類型——授權過濾器和異常過濾器。儘管操作過濾器依然是最常見的過濾器類型,但我們希望提供能夠在任意或者所有操作過濾器之前啟動並執行過濾器,而不管過濾器的範圍。這樣可以防止某些情形的出現,如在Authorization過濾器之前執行OutputCache過濾器,從而導致騙取授權。
為了支援新的過濾器類型,加入或修改了下列特性:
- 新的IAuthorizationFilter和IExceptionFilter介面。授權過濾器可以確保在所有其他動作過濾器之前運行。每個異常過濾器都會執行,即便是某個過濾器指明它已經處理了請求。這有助於記錄和處理異常。
- AuthorizeAttribute類。這是IAuthorizationFilter的預設的具體實現。用於確保操作方法的安全。
- HandleErrorAttribute類。這是IExceptionFilter的預設的具體實現。用於處理異常並指定在發生異常時呈現哪個視圖。
- 新的FilterAttribute基類。我們和新的過濾器類型一起引入了新的基類,這對所有過濾器特性都是有用的。
輸出緩衝過濾器
OutputCacheAttribute類是一個新的操作過濾器,用於使用內建的ASP.NET輸出緩衝來快取作業方法的輸出。
注意
在該發布版中,在Medium信任層級下為輸出緩衝過濾器設定CacheProfile屬性會拋出一個異常。該問題會在未來的發布版中解決。
ASP.NET AJAX的變化
添加了下面的AJAX輔助方法。它們使用AjaxOptions類來指定非同步作業的選項。
- ActionLink。該方法呈現一個指向某操作方法的錨標籤。當單擊該連結時,會非同步地叫用作業方法。該輔助方法的典型應用是通過指定AjaxOptions.UpdateTargetId屬性擷取響應並更新DOM元素。
- Form。該方法呈現一個可以非同步提交的HTML表單。該輔助方法的典型應用是提交表單,和ActionLink類似,通過指定AjaxOptions.UpdateTargetId屬性來擷取響應並更新DOM元素。
我們將持續為ASP.NET MVC增強AJAX特性。這裡提到的特性只是一個初級版本,我們希望在將來的發布版中能提供更強的特性。
路由的命名空間
在ASP.NET MVC之前的預覽版中,架構會掃描所有程式集中的類型,以便找到控制器實現。然而,這樣做偶爾會拋出異常,如某個類型是從一個尚未載入的程式集中的某個類型繼承而來的,則架構在反射該類型時就會出錯。
在這個發布中,我們提供了一種途徑,能夠為架構指定在嘗試載入控制器類型時去檢查哪些命名空間,這需要使用ControllerBuilder類的DefaultNamespaces屬性。下面的樣本展示了如何為解析控制器載入命名空間。
<br />void Application_Start(object sender, EventArgs e) {<br /> ControllerBuilder.Current.DefaultNamespaces.Add("MyApp.Controllers");<br /> ControllerBuilder.Current.DefaultNamespaces.Add("MyApp.Blog.Controllers");<br /> ControllerBuilder.Current.DefaultNamespaces.Add("ThirdPartyApp.Controllers");<br /> // ...<br />}
你也可以依次為每個路由指定命名空間。(在該發布版中,你還不能使用MapRoute擴充方法來做這件事。)下面的例子展示了如何為一個路由指定命名空間。
<br />var dataTokens = new RouteValueDictionary();<br />dataTokens.Add("namespaces", new HashSet<string>(<br /> new string[] {<br /> "MyApp.Blog.Controllers",<br /> "MyApp.Forum.Controllers",<br /> "MyApp.Controllers"<br /> }));<br />routes.Add(<br /> new Route("ns/{controller}/{action}/{id}", new MvcRouteHandler()) {<br /> Defaults = new RouteValueDictionary(new {<br /> action = "Index",<br /> id = (string)null<br /> }),<br /> DataTokens = dataTokens<br />});<br /></string>TempData的增強可測試性介面
在該發布版中,我們改進了可測試性,你可以使用會話Cookie而不是工作階段狀態。添加了一個新的ITempDataProvider介面。預設情況下,控制器通過SessionStateTempDataProvider來訪問工作階段狀態,但現在可以實現其他的提供者了。
ActionInvoker可擴充改進
添加了新的虛擬方法,在進階情境裡你可以擴充調用器。下面的表格列出了新的方法。
方法 |
說明 |
GetFiltersForActionMethod |
返回操作方法上的所有過濾器(授權、操作和異常過濾器)。 |
InvokeActionResultWithFilters |
在操作方法返回的ActionResult對象上調用ExecuteResult方法,以及應用於該操作方法的所有結果過濾器。 |
InvokeAuthorizationFilters |
調用應用於操作方法上的授權過濾器。 |
InvokeExceptionFilters |
調用應用於操作方法上的異常過濾器。 |
ViewDataDictionary
我們對ViewDataDictionary進行了少許修改,將其索引器修改為一般索引器,並添加了Eval方法,用於對模型進行求值。
MVC的未來
ASP.NET MVC團隊在日常的開發過程中,為很多特性建立了原型。這些特性有些會包含在RTM發布版中。如果沒有包含進去,則可能會包含在未來的完整發布版中。我們將這些特性中的很多都放在了一個單獨的MVC Futures項目中了。你會注意到項目模板包含並引用了一個名為Microsoft.Web.Mvc.dll的程式集,這就是MVC Futures項目的編譯形式。
注意ComponentController和RenderComponent方法已經被替換成了MVC Futures項目中定義的RenderAction方法。RenderAction與普通的控制器協作,而不是特定的ComponentController對象。
對於該發布版,MVC Futures程式集(Microsoft.Web.Mvc.dll)被包含在了項目模板中,但在Beta和RTM發布版中就不會這樣了。
將現有的Preview3應用程式升級到Preview 4 CodePlex Release
這一部分介紹了要想使使用Preview 3發布版建立的ASP.NET MVC應用程式能夠運行在Preview 4發布版上,必須要對應用程式進行的修改。
已知問題
- 在Medium信任下,在OutputCache過濾器上設定CacheProfile屬性會拋出異常。
- 注意如果要在Visual Studio 2008速成版中使用ASP.NET MVC,你需要安裝Visual Studio 2008 Express Edition SP1,位於:http://www.microsoft.com/downloads/details.aspx?FamilyId=BDB6391C-05CA-4036-9154-6DF4F6DEBD14&displaylang=en。與此相關的更多資訊,請查看ScottGu的部落客題:http://weblogs.asp.net/scottgu/archive/2008/06/01/asp-net-mvc-support-with-visual-web-developer-2008-express.aspx。