62

Is there a comprehensive list that explains all of the new features of MVC4 and what all has changed from MVC3?

(The release notes are not much helpful)

4

6 回答 6

61

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

•<strong>现代HTTP 编程模型:使用新的强类型HTTP 对象模型直接访问和操作Web API 中的HTTP 请求和响应。通过新的 HttpClient 类型可以在客户端对称地使用相同的编程模型和 HTTP 管道。

•<strong>完全支持路由:ASP.NET Web API 支持 ASP.NET Routing 的全套路由功能,包括路由参数和约束。此外,使用简单的约定将操作映射到 HTTP 方法。

•<strong>内容协商:客户端和服务器可以共同确定从Web API 返回的数据的正确格式。ASP.NET Web API 为 XML、JSON 和表单 URL 编码格式提供默认支持,您可以通过添加自己的格式化程序来扩展此支持,甚至替换默认的内容协商策略。

•<strong>模型绑定和验证:模型绑定提供了一种从 HTTP 请求的各个部分提取数据并将这些消息部分转换为 Web API 操作可以使用的 .NET 对象的简单方法。还基于数据注释对动作参数执行验证。

•<strong>过滤器:ASP.NET Web API 支持过滤器,包括众所周知的过滤器,例如 [Authorize] 属性。您可以创作和插入您自己的过滤器,用于操作、授权和异常处理。

•<strong>查询组合:对返回 IQueryable 的操作使用 [Queryable] 过滤器属性,以支持通过 OData 查询约定查询您的 Web API。

•<strong>改进的可测试性:Web API 操作不是在静态上下文对象中设置 HTTP 详细信息,而是使用 HttpRequestMessage 和 HttpResponseMessage 实例。与您的 Web API 项目一起创建一个单元测试项目,以便快速开始为您的 Web API 功能编写单元测试。

•<strong>基于代码的配置:ASP.NET Web API 配置仅通过代码完成,使您的配置文件保持干净。使用提供服务定位器模式来配置扩展点。

•<strong>改进了对控制反转 (IoC) 容器的支持:ASP.NET Web API 通过改进的依赖解析器抽象为 IoC 容器提供了强大的支持

•<strong>自托管:除了 IIS,Web API 还可以托管在您自己的进程中,同时仍然使用路由的全部功能和 Web API 的其他功能。

•<strong>创建自定义帮助和测试页面:您现在可以通过使用新的 IApiExplorer 服务轻松地为您的 Web API 构建自定义帮助和测试页面,以获得您的 Web API 的完整运行时描述。

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

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

•<strong>Web API 项目模板:从新建 MVC 4 项目向导中选择新的 Web API 项目,以快速启动并运行 ASP.NET Web API。

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

于 2012-09-21T17:34:18.740 回答
41

从MVC4 中的新功能复制和粘贴- MVC3 Vs MVC4

MVC4 中的新功能 - MVC3 与 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 UI。如果您想将 jQuery Mobile 与 ASP.NET MVC 4 应用程序一起使用,您可以下载并安装一个帮助您入门的 NuGet 包。要从 Visual Studio 包管理器控制台安装它,请键入以下命令: 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 中生成代码的秘诀

新的“食谱”功能使 Visual Studio 能够基于可以使用 NuGet 安装的包生成特定于解决方案的代码。Recipes 框架使开发人员可以轻松编写代码生成插件,您还可以使用这些插件来替换 Add Area、Add Controller 和 Add View 的内置代码生成器。由于配方部署为 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 的调用是异步调用的,不会阻塞线程池中的线程。

返回 Task 实例的异步操作方法也可以支持超时。要使您的操作方法可取消,请将 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)
    });
}

希望这可以帮助。谢谢

于 2012-09-21T18:35:28.397 回答
2

请浏览所有 MVC 4 新功能的 URL

于 2013-11-25T07:31:45.520 回答
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. 增强了对异步方法的支持

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

于 2014-01-15T11:10:36.240 回答
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();
  }
}

脚步:

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

  • 对应同步控制器中的同步动作方法,需要为异步控制器中的动作创建两个方法。第一个启动异步过程的方法必须有一个由动作和后缀“Async”组成的名称。异步过程完成时调用的另一个方法(回调方法)必须具有由操作和后缀“已完成”组成的名称。

    在上面的示例中,Index 动作在异步控制器中变成了两个方法:IndexAsync 和 IndexCompleted。

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

请注意以下有关异步操作方法的内容:

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

视图页面应命名为 Sample.aspx,而不是 SampleAsync.aspx 或 SampleCompleted.aspx。(动作名称是 Sample,而不是 SampleAsync)

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

有关更多详细信息,请单击此处:http ://www.coun sellbyabhi.com/2014/05/asynchronous-controllers-in-aspnet-mvc.html

于 2014-05-05T08:26:29.097 回答