ASP.NETMVC 3和4的区别是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (63)

是否有一个全面的列表来解释MVC4的所有新功能以及MVC3的所有变化?

提问于
用户回答回答于

MVC4发行说明复制并粘贴:

现代HTTP编程模型:使用新的强类型HTTP对象模型直接访问和处理Web API中的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细节不同,Web API操作与HttpRequestMessage和HttpResponseMessage的实例一起工作。创建一个单元测试项目以及Web API项目,快速开始为Web API功能编写单元测试。

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

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

自我托管:除IIS之外,Web API还可以托管在您自己的流程中,同时仍然使用Web API的全部路由功能和其他功能。

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

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

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

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

脚手架:使用“添加控制器”对话框可基于基于实体框架的模型类型快速搭建Web API控制器。

用户回答回答于

复制并粘贴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,View切换器和浏览器覆盖

jQuery Mobile是一个用于构建触控优化Web UI的开源库。如果想使用带有ASP.NET MVC 4应用程序的jQuery Mobile,则可以下载并安装一个可帮助入门的NuGet包。要从Visual Studio Package Manager控制台安装它,请键入以下命令:Install-Package jQuery.Mobile.MVC这将安装jQuery Mobile和一些帮助程序文件,包括以下内容:Views / Shared / Layout.Mobile.cshtml,它是一个基于jQuery Mobile的布局。一个视图切换器组件,它由Views / Shared / ViewSwitcher.cshtml分部视图和ViewSwitcherController.cs控制器组成。安装软件包后,使用移动浏览器(或类似的Firefox用户代理切换器附件)运行应用程序。你会看到你的网页看起来很不一样,因为jQuery Mobile处理布局和样式。要利用此优势,可以执行以下操作如果访问者单击该链接,他们将切换到同一页面的桌面版本。由于默认情况下桌面布局不会包含视图切换器,因此访问者无法进入移动模式。要启用此功能,请将以下对_ViewSwitcher的引用添加到桌面布局中,就在元素内部:

@Html.Partial("_ViewSwitcher")

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

用于Visual Studio中代码生成的配方

新的Recipes功能使Visual Studio能够根据可以使用NuGet安装的软件包生成特定于解决方案的代码。Recipes框架使开发人员可以轻松编写代码生成插件,还可以使用它替换添加区域,添加控制器和添加视图的内置代码生成器。由于配方以NuGet包的形式部署,因此可以轻松将其检入到源代码管理中,并自动与项目中的所有开发人员共享。它们也可以按照解决方案提供。

异步控制器的任务支持

现在可以将异步操作方法编写为返回Task或Task类型的对象的单个方法。

例如,如果使用Visual C#5(或使用Async 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)
    });
}

扫码关注云+社区

领取腾讯云代金券