2012-09-21 173 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中引入的异步控制器。这就是我在这里提到的原因。 –

相关问题