2012-09-21 169 views
63

是否有一個全面的列表,解釋了MVC4的所有新功能以及MVC3的所有變化?ASP.NET MVC 3和4之間的區別?

(該release notes都沒有太大幫助的)

+2

看版本說明:http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253808 –

+14

「發行說明是不是......有幫助「...」看看版本說明..「? –

回答

61

複製和粘貼從MVC4 Release Notes

現代HTTP編程模型:直接訪問和操作使用新的在Web API的HTTP請求和響應,強類型的HTTP對象模型。通過新的HttpClient類型,客戶端可以對稱地使用相同的編程模型和HTTP管道。

對路由的全面支持:ASP.NET Web API支持ASP.NET路由的全套路由功能,包括路由參數和約束。另外,使用簡單的約定將動作映射到HTTP方法。

內容協商:客戶端和服務器可以一起決定從Web API返回的數據格式正確。 ASP.NET Web API爲XML,JSON和表單URL編碼格式提供默認支持,您可以通過添加自己的格式化程序來擴展此支持,甚至可以替換默認的內容協商策略。

模型綁定和驗證:模型綁定器提供了一種從HTTP請求的各個部分中提取數據並將這些消息部分轉換爲可由Web API操作使用的.NET對象的簡單方法。還基於數據註釋對動作參數進行驗證。

篩選器:ASP.NET Web API支持包括衆所周知的篩選器(如[Authorize]屬性)的篩選器。您可以編寫並插入自己的過濾器,以執行操作,授權和異常處理。

查詢組合:對返回IQueryable的操作使用[Queryable]過濾器屬性,以支持通過OData查詢約定查詢您的Web API。

改善測試:而不是靜態上下文對象設置HTTP的詳細信息,網頁API操作與HttpRequestMessage和HttpResponseMessage的情況下工作。創建一個單元測試項目以及您的Web API項目,快速開始爲您的Web API功能編寫單元測試。

基於代碼的配置:ASP.NET Web API配置僅通過代碼完成,使您的配置文件保持清潔。使用提供服務定位器模式來配置可擴展性點。

的控制反轉(IoC)容器倒置的改進支持:網站的API可以是:的ASP.NET Web API通過改進依賴解析器抽象

自主機提供IoC容器的大力支持託管在您自己的流程中,除了IIS,同時仍然使用Web API的路由和其他功能的全部功能。

創建自定義的幫助和測試頁面:現在,您可以輕鬆地通過使用新的IApiExplorer服務,讓您的網絡API的完整的運行時的描述構建定製的幫助和測試頁爲您的網站的API。

監控和診斷:ASP.NET Web API現在提供輕量級跟蹤基礎架構,可輕鬆與現有日誌記錄解決方案(如System.Diagnostics,ETW和第三方日誌記錄框架)集成。您可以通過提供一個ITraceWriter實現並將其添加到您的Web API配置來啓用跟蹤。

鏈接生成:使用ASP.NET Web API UrlHelper生成指向同一應用程序中相關資源的鏈接。

的Web API項目模板:選擇新的Web API項目形成新的MVC 4項目嚮導快速學習和使用的ASP.NET Web API運行。

腳手架:使用「添加控制器」對話框以基於基於實體框架的模型類型快速搭建Web API控制器。

+6

但是,這幾乎都是關於web api ....如果我不打算使用web api,有沒有什麼新東西可以學習? –

+0

mvc3和mvc4都是Web開發框架。你的意思是.Net 4.5嗎? –

+2

@JSKNS Web API是一個構建在ASP.NET MVC之上的框架,用於構建RESTful API。他的意思是說,發佈說明中的大部分內容都是Web API特定的,而不是所有ASP.NET MVC的通用內容。 –

42

複製並粘貼到Whats new in MVC4 - MVC3 Vs MVC4

哪些新的MVC4 - MVC3 Vs的MVC4

增強默認的項目模板

用來創建新的ASP模板。 NET MVC 4項目已更新,以創建更現代的網站

移動項目模板

如果你開始一個新項目,要創建一個特定的網站手機和平板電腦的瀏覽器,你可以使用新的移動應用程序的項目模板。這是基於jQuery Mobile的,一個開源庫,用於構建觸摸優化的UI

顯示模式

新的顯示模式功能,您的應用程序中選擇這取決於對提出請求的瀏覽器視圖。例如,如果桌面瀏覽器請求主頁,則應用程序可能會使用Views\Home\Index.cshtml模板。如果移動瀏覽器請求主頁,則應用程序可能會返回Views\Home\Index.mobile.cshtml模板。

DisplayModes.Modes.Insert(0, new DefaultDisplayMode("iPhone") 
{ 
    ContextCondition = (context => context.Request.UserAgent.IndexOf 
    ("iPhone", StringComparison.OrdinalIgnoreCase) >= 0) 
}); 

jQuery Mobile的,視圖切換器和瀏覽器重寫

jQuery Mobile的是建設觸摸優化的web用戶界面的開源庫。如果您想使用帶有ASP.NET MVC 4應用程序的jQuery Mobile,則可以下載並安裝一個可幫助您入門的NuGet包。要從Visual Studio Package Manager Console安裝它,請鍵入以下命令: Install-Package jQuery.Mobile。MVC 這將安裝jQuery Mobile的和一些輔助文件,包括以下內容: 查看/共享/ Layout.Mobile.cshtml,這是一個基於移動jQuery的佈局。 視圖-切換器組件,其由所述查看/共享/ ViewSwitcher.cshtml局部視圖和ViewSwitcherController.cs控制器。 安裝包後,運行使用移動瀏覽器應用程序(或等值,像Firefox的用戶代理切換器插件)。你會發現你的頁面看起來完全不同,因爲jQuery Mobile處理佈局和樣式。爲了充分利用這一點,你可以做以下 如果訪問者點擊該鏈接後,會切換到同一頁面的桌面版本。 因爲你的桌面佈局將不包括默認視圖切換,遊客會不會有一種方式來獲得移動模式。爲了實現這一點,以下引用 _ViewSwitcher添加到您的桌面佈局,只是裏面的元素:

@Html.Partial("_ViewSwitcher") 

... 瀏覽器重寫是ASP.NET的核心功能MVC 4和可即使你不要安裝jQuery.Mobile.MVC包。但是,它僅影響視圖,佈局和局部視圖選擇 - 它不會影響依賴於Request.Browser對象的任何其他ASP.NET功能。在Visual Studio

新的食譜功能

食譜代碼生成使Visual Studio來生成基於您可以安裝使用的NuGet包的特定解決方案的代碼。 Recipes框架使開發人員可以輕鬆編寫代碼生成插件,您還可以使用它替換添加區域,添加控制器和添加視圖的內置代碼生成器。由於配方以NuGet包的形式部署,因此可以輕鬆將其檢入到源代碼管理中,並自動與項目中的所有開發人員共享。它們也可以按照解決方案提供。

任務支持異步控制器

現在,您可以編寫異步操作方法爲單一的方法,返回類型任務或任務的對象。

例如,如果你使用Visual C#5(或使用異步CTP),您可以創建一個異步操作方法如下所示:

public async Task Index(string city) { 
    var newsService = new NewsService(); 
    var sportsService = new SportsService(); 

    return View("Common", new PortalViewModel { 
     NewsHeadlines = await newsService.GetHeadlinesAsync(), 
     SportsScores = await sportsService.GetScoresAsync() 
    }); 
} 

在前面的操作方法,該對newsService.GetHeadlinesAsync和sportsService.GetScoresAsync的調用是異步調用的,不會阻塞線程池中的線程。

異步操作方法,返回任務實例也可以支持超時。要使您的操作方法可取消,請將類型CancellationToken的參數添加到操作方法簽名中。以下示例顯示了一個異步操作方法,其超時時間爲2500毫秒,如果發生超時,則會向客戶端顯示TimedOut視圖。

[AsyncTimeout(2500)] 
[HandleError(ExceptionType = typeof(TaskCanceledException), View = "TimedOut")] 
public async Task Index(string city, CancellationToken cancellationToken) { 
    var newsService = new NewsService(); 
    var sportsService = new SportsService(); 

    return View("Common", new PortalViewModel { 
     NewsHeadlines = await newsService.GetHeadlinesAsync(cancellationToken), 
     SportsScores = await sportsService.GetScoresAsync(cancellationToken) 
    }); 
} 

希望這有助於。由於

1

去MVC 3

  1. 通過的NuGet綜合腳手架系統可擴展
  2. HTML 5啓用項目模板
  3. 表現視圖,包括新的Razor視圖 引擎
  4. 強大的依賴注入鉤子和 全局動作過濾器
  5. 豐富的JavaScript的支持與侵入式JavaScript,jQuery驗證和JSON結合

MVC 4

  1. 的ASP.NET Web API
  2. 裝修一新的,現代化的默認項目 模板
  3. 新手機項目模板
  4. 許多支持移動應用程序的新功能
  5. 爲異步方法
  6. 增強支持

編號:http://dotnet-developers-cafe.blogspot.in/2013/09/difference-between-aspnet-mvc-3-and-mvc.html

0

一個在MVC 4.0中引入的重要特點之一是異步控制器,這使得編寫異步操作方法。異步控制器允許在不使工作線程空閒的情況下執行操作。

當調用異步操作,發生以下步驟:

Web服務器會從線程池(工作線程),並安排它來處理傳入的請求的線程。此工作線程啓動異步操作。 工作線程返回到線程池以處理其他Web請求。 當異步操作完成時,它會通知ASP.NET。 Web服務器從線程池(可能是與啓動異步操作的線程不同的線程)獲取工作線程,以處理請求的其餘部分,包括呈現響應。

轉換同步動作的方法,以異步操作方法

以下是同步的操作方法,並在它的異步等效版本的例子。

同步控制器:

public class TestController : Controller 
{ 
    public ActionResult Index() 
    { 
    return View(); 
    } 
} 

上述操作的異步變體:

public class TestController : AsyncController 
{ 
    public void IndexAsync() 
    { 
    return View(); 
    } 

    public ActionResult IndexCompleted() 
    { 
    return View(); 
    } 
} 

步驟:

  • 同步控制器從控制器 類派生的類來實現的AsyncController而不是派生的 控制器從控制器,從AsyncController類派生它。 從AsyncController派生的控制器使ASP.NET能夠處理異步請求 ,並且它們仍然可以服務同步的 動作方法。

  • 對應的同步動作方法同步 控制器,你需要創建在啓動異步 過程中必須有一個由行動的名稱和後綴 異步controller.First方法的動作兩種方法 「異步」。另一種在異步過程完成時調用的方法(回調方法)必須具有一個名稱,該名稱由操作的 和後綴「Completed」組成。

    在上面的示例中,Index操作已變爲 異步控制器中的兩種方法:IndexAsync和 IndexCompleted。

    IndexAsync方法返回void,而IndexCompleted方法 返回ActionResult實例。雖然該操作由兩個方法組成,但它們使用與同步 操作方法(例如Controller/Index)相同的URL進行訪問。

請注意以下有關異步操作方法:

如果動作的名稱是樣品,框架將尋找SampleAsync和SampleCompleted方法。

查看頁面應該命名爲Sample.aspx,而不是SampleAsync.aspx或SampleCompleted.aspx。 (動作名稱爲Sample,而不是SampleAsync)

控制器不能包含名爲SampleAsync的異步方法和名爲Sample的同步方法。如果有,則會引發AmbiguousMatchException異常,因爲SampleAsync操作方法和Sample操作方法具有相同的請求籤名。

欲瞭解更多詳情請點擊這裏:http://www.counsellingbyabhi.com/2014/05/asynchronous-controllers-in-aspnet-mvc.html

+0

異步控制器在其他響應中提到(來自2年前) –

+1

但是這裏沒有提到MVC 4中引入的異步控制器。這就是我在這裏提到的原因。 –

相關問題