有没有一份全面的列表,解释了所有MVC4的新功能以及与MVC3相比发生了哪些变化?
(发布说明并不是很有帮助)
有没有一份全面的列表,解释了所有MVC4的新功能以及与MVC3相比发生了哪些变化?
(发布说明并不是很有帮助)
从 MVC4 Release Notes 中复制并粘贴:
•现代化的HTTP编程模型: 使用新的强类型HTTP对象模型直接访问和操作Web API中的HTTP请求和响应。客户端可以通过新的HttpClient类型使用相同的编程模型和HTTP管道。
•完整支持路由: ASP.NET Web API支持ASP.NET Routing的全部路由功能,包括路由参数和约束条件。此外,还可以使用简单的约定将操作映射到HTTP方法。
•内容协商: 客户端和服务器可以共同确定从Web API返回的数据的正确格式。ASP.NET Web API提供对XML、JSON和表单URL编码格式的默认支持,您可以通过添加自己的格式化程序甚至替换默认内容协商策略来扩展此支持。
•模型绑定和验证: 模型绑定器提供了一种轻松的方式来提取HTTP请求的各个部分中的数据,并将这些消息部分转换为可被Web API操作使用的.NET对象。根据数据注释,还对操作参数执行验证。
•过滤器: ASP.NET Web API支持过滤器,包括[Authorize]属性等常见过滤器。您可以编写和插入自己的过滤器以进行操作、授权和异常处理。
•查询组合: 在返回IQueryable的操作上使用[Queryable]过滤器属性,以启用通过OData查询约定查询您的Web API。
•改进的可测试性: Web API操作不需要在静态上下文对象中设置HTTP细节,而是使用HttpRequestMessage和HttpResponseMessage的实例来工作。创建一个单元测试项目以及您的Web API项目,快速开始编写针对Web API功能的单元测试。
•基于代码的配置: ASP.NET Web API配置完全通过代码完成,使您的配置文件保持干净。使用提供的服务定位器模式配置可扩展性点。
•改善对控制反转(IoC)容器的支持:ASP.NET Web API 通过改进的依赖项解析器抽象提供了出色的 IoC 容器支持。
•自托管:除了使用完整功能的路由和其他 Web API 功能外,Web API 还可以在您自己的进程中托管。
•创建自定义帮助和测试页面:现在您可以使用新的 IApiExplorer 服务,获取您的 Web API 的完整运行时描述,从而轻松构建自定义帮助和测试页面。
•监视和诊断:ASP.NET Web API 现在提供了轻量级的跟踪基础结构,使其易于与现有的日志记录解决方案(如 System.Diagnostics、ETW 和第三方日志框架)集成。您可以通过提供 ITraceWriter 实现并将其添加到您的 Web API 配置来启用跟踪。
•链接生成:使用 ASP.NET Web API UrlHelper 生成链接,以访问同一应用程序中的相关资源。
•Web API 项目模板:从“新 MVC 4 项目向导”中选择新的 Web API 项目,以快速启动 ASP.NET Web API。
•脚手架:使用“添加控制器”对话框,根据基于 Entity Framework 的模型类型,快速构建 Web API 控制器。
从MVC4中的新功能-MVC3与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的开源库。如果你想在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")
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()
});
}
[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 3
MVC 4
参考: http://dotnet-developers-cafe.blogspot.in/2013/09/difference-between-aspnet-mvc-3-and-mvc.html
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();
}
}
步骤:
同步控制器(Synchronous Controllers)是从Controller类派生的类,用于实现AsyncController,而不是从Controller派生控制器。派生自AsyncController的控制器使ASP.NET能够处理异步请求,并且它们仍然可以服务于同步操作方法。
对应于同步控制器中的同步操作方法,您需要为asynchronous controller中的操作创建两个方法。启动异步进程的第一个方法必须有一个由操作和后缀“Async”组成的名称。当异步进程完成时调用的另一个方法(回调方法)必须具有由操作和后缀“Completed”组成的名称。
在上述示例中,Index操作已经变成了asynchronous controller中的两个方法: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.counsellingbyabhi.com/2014/05/asynchronous-controllers-in-aspnet-mvc.html