ASP.NET MVC 3和4之间的区别?

是否有一个全面的列表,解释了MVC4的所有新特性,以及MVC3的所有变化?

( 发行说明没有多大帮助)

从MVC4发行说明复制并粘贴:

现代HTTP编程模型 :使用新的强typesHTTP对象模型直接访问和操作Web API中的HTTP请求和响应。 通过新的HttpClienttypes,相同的编程模型和HTTPpipe道在客户端对称可用。

完全支持路由 :ASP.NET Web API支持ASP.NET路由的全套路由function,包括路由参数和约束。 此外,使用简单的约定将动作映射到HTTP方法。

内容协商 :客户端和服务器可以一起工作,以确定从Web API返回的数据的正确格式。 ASP.NET Web API提供对XML,JSON和表单URL编码格式的默认支持,您可以通过添加自己的格式化程序来扩展此支持,甚至可以replace默认的内容协商策略。

模型绑定和validation :模型绑定器提供了一种从HTTP请求的各个部分提取数据的简单方法,并将这些消息部分转换为可由Web API操作使用的.NET对象。 也基于数据注释对动作参数进行validation。

filter :ASP.NET Web API支持包括众所周知的filter的filter,例如[Authorize]属性。 您可以编写和插入自己的filter,以执行操作,授权和exception处理。

查询组合 :在返回IQueryable的操作上使用[Queryable]filter属性,以支持通过OData查询约定查询您的Web API。

改进的可testing性 :与其在静态上下文对象中设置HTTP细节,Web API操作与HttpRequestMessage和HttpResponseMessage的实例一起工作。 创build一个unit testing项目以及您的Web API项目,快速开始为您的Web APIfunction编写unit testing。

基于代码的configuration :ASP.NET Web APIconfiguration仅通过代码完成,保持您的configuration文件清洁。 使用提供服务定位器模式来configuration可扩展性点。

改进对控制反转(IoC)容器的支持 :ASP.NET Web API通过改进的依赖关系parsing器抽象为IoC容器提供了强大的支持

自主服务 :除了IIS之外,Web API还可以在您自己的进程中进行托pipe,同时仍然使用Web API的全部路由function和其他function。

创build自定义的帮助和testing页面 :现在,您可以使用新的IApiExplorer服务轻松地为您的Web API构build自定义的帮助和testing页面,以获取完整的Web API运行时描述。

监视和诊断 :ASP.NET Web API现在提供轻量级的跟踪基础架构,可以轻松地与现有的日志logging解决scheme(如System.Diagnostics,ETW和第三方日志logging框架)集成。 您可以通过提供一个ITraceWriter实现并将其添加到您的Web APIconfiguration来启用跟踪。

链接生成 :使用ASP.NET Web API UrlHelper在相同的应用程序中生成指向相关资源的链接。

Web API项目模板 :从New MVC 4 Project向导中select新的Web API项目,以快速启动并运行ASP.NET Web API。

脚手架 :使用“添加控制器”对话框可以基于基于entity framework的模型types快速搭buildWeb API控制器。

复制并粘贴从MVC4新MVC3 – MVC4

MVC4 MVC3与MVC4的新特性

默认项目模板的增强

用于创build新的ASP.NET MVC 4项目的模板已更新,以创build更现代化的网站

移动项目模板

如果您正在开始一个新项目,并且想要专门为手机和平板电脑浏览器创build网站,则可以使用新的移动应用程序项目模板。 这是基于jQuery Mobile,一个用于构build触控优化UI的开源库

显示模式

新的“显示模式”function使应用程序可以根据发出请求的浏览器来select视图。 例如,如果桌面浏览器请求主页,则应用程序可能使用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是一个用于构build触摸优化的Web UI的开源库。 如果你想使用jQuery Mobile和ASP.NET MVC 4应用程序,你可以下载并安装一个可以帮助你开始的NuGet包。 要从Visual Studio包pipe理器控制台安装它,请input以下命令:Install-Package jQuery.Mobile.MVC这将安装jQuery Mobile和一些帮助程序文件,其中包括以下内容:Views / Shared / Layout.Mobile.cshtml,这是一个基于jQuery Mobile的布局。 视图切换器组件,由Views / Shared / ViewSwitcher.cshtml分部视图和ViewSwitcherController.cs控制器组成。 安装软件包后,使用移动浏览器(或类似的Firefox用户代理切换器附件)运行应用程序。 你会发现你的页面看起来完全不同,因为jQuery Mobile处理布局和样式。 要利用这一点,您可以执行以下操作如果访问者单击该链接,则会切换到同一页面的桌面版本。 由于您的桌面布局默认不包含视图切换器,访问者将无法进入移动模式。 为了实现这个function,请将以下对_ViewSwitcher的引用添加到您的桌面布局中,就在元素中:

 @Html.Partial("_ViewSwitcher") 

…浏览器重写是ASP.NET MVC 4的一个核心function,即使你不安装jQuery.Mobile.MVC包也是可用的。 但是,它仅影响视图,布局和部分视图select – 它不会影响依赖于Request.Browser对象的任何其他ASP.NETfunction。

Visual Studio中的代码生成食谱

新的Recipesfunction使Visual Studio能够根据您可以使用NuGet安装的软件包生成特定于解决scheme的代码。 Recipes框架使开发人员可以轻松编写代码生成插件,您还可以使用它replace添加区域,添加控制器和添加视图的内置代码生成器。 因为食谱被部署为NuGet包,所以它们可以很容易地被检查到源代码控制中,并自动与项目中的所有开发人员共享。 它们也可以按照解决scheme提供。

asynchronous控制器的任务支持

您现在可以将asynchronous操作方法编写为返回Task或Tasktypes的对象的单个方法。

例如,如果您正在使用Visual C#5(或使用Async CTP),则可以创build一个asynchronous操作方法,如下所示:

 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的调用是asynchronous调用的,不会阻塞线程池中的线程。

返回任务实例的asynchronous操作方法也可以支持超时。 要使您的操作方法可取消,请将typesCancellationToken的参数添加到操作方法签名中。 以下示例显示了一个asynchronous操作方法,其超时时间为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) }); } 

希望这可以帮助。 谢谢

请浏览所有MVC 4新function的URL

MVC 3

  1. 集成的脚手架系统可通过NuGet扩展
  2. 启用HTML 5的项目模板
  3. 富有performance力的视图,包括新的Razor视图引擎
  4. 强大的dependency injection和全局动作filter
  5. 丰富的JavaScript支持与不显眼的JavaScript,jQueryvalidation和JSON绑定

MVC 4

  1. ASP.NET Web API
  2. 刷新和现代化的默认项目模板
  3. 新的移动项目模板
  4. 支持移动应用程序的许多新function
  5. 增强了对asynchronous方法的支持

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

MVC 4.0中引入的一个重要function是asynchronous控制器,它允许编写asynchronous操作方法。 asynchronous控制器允许在不使工作线程空闲的情况下执行操作。

在调用asynchronous操作时,将执行以下步骤:

Web服务器从线程池(工作线程)获取一个线程,并安排它来处理一个传入的请求。 这个工作线程启动一个asynchronous操作。 工作者线程返回到线程池以处理其他Web请求。 当asynchronous操作完成时,它会通知ASP.NET。 Web服务器从线程池(可能是与启动asynchronous操作的线程不同的线程)获取工作线程,以处理请求的其余部分,包括呈现响应。

将同步操作方法转换为asynchronous操作方法

以下是同步动作方法及其asynchronous等效版本的示例。

同步控制器:

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

上述操作的asynchronous变体:

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

脚步:

  • 同步控制器是派生自Controller类的类,用于实现AsyncController,而不是从Controller派生控制器,从AsyncController类派生它。 从AsyncController派生的控制器使ASP.NET能够处理asynchronous请求,而且它们仍然可以为同步操作方法提供服务。

  • 与同步控制器中的同步操作方法相对应,您需要为asynchronous控制器中的操作创build两个方法。启动asynchronous过程的第一个方法必须具有由动作和后缀“Async”组成的名称。 另一种在asynchronous过程完成时调用的方法(callback方法)必须有一个由动作和后缀“Completed”组成的名称。

    在上面的示例中,Index操作已经转化为asynchronous控制器中的两个方法:IndexAsync和IndexCompleted。

    IndexAsync方法返回void,而IndexCompleted方法返回一个ActionResult实例。 尽pipe该操作由两个方法组成,但它使用与同步操作方法(例如Controller / Index)相同的URL进行访问。

请注意以下关于asynchronous操作方法:

如果操作名称是Sample,框架将查找SampleAsync和SampleCompleted方法。

查看页面应该命名为Sample.aspx,而不是SampleAsync.aspx或SampleCompleted.aspx。 (操作名称是Sample,而不是SampleAsync)

控制器不能包含名为SampleAsync的asynchronous方法和名为Sample的同步方法。 如果有,则会引发AmbiguousMatchExceptionexception,因为SampleAsync操作方法和Sample操作方法具有相同的请求签名。

欲了解更多详情,请点击此处: http : //www.counsellingbyabhi.com/2014/05/asynchronous-controllers-in-aspnet-mvc.html