[翻译] ASP.NET MVC CodePlex Preview 4 Release Notes

ASP.NET MVC CodePlex Preview 4 Release Notes

摘要:本文档描述了ASP.NET MVC框架的Preview 3与目前的CodePlex Preview 4之间的差别。还介绍了要运行新的发布版,你必须对现有的MVC应用程序进行的修改。

简介

CodePlex Preview 4的发布包含了很多新的特性,并对默认项目模板进行了修改。对默认项目模板进行修改的目的是帮助启动最常见的应用程序构建场景。很多新特性都集中在简单的AJAX场景上。

What’s New

这一部分介绍了该发布版中新的和修改过的特性。

默认项目模板中的简单成员资格特性

很多Web应用程序都需要某种形式的用户验证。该发布版在默认项目模板中包含了一个AccountController类,用于处理下面这些用户操作:

  • 登录
  • 注销
  • 注册
  • 修改密码

默认项目模板的Web.config文件中包含了对MembershipProvider类的配置。这意味着当首次访问成员资格特性时,ASP.NET会自动创建一个SQL Server Express Edition成员资格数据库。你可以将SQL Server Express Edition数据库转换为SQL Server数据库,或修改Web.config文件中的连接字符串,使其指向一个现有的包含成员资格表的数据库。

默认模板中还包含Microsoft ASP.NET AJAX脚本文件的一个副本。我们一直在持续地为MVC版的ScriptManager控件进行工作;例如,我们使注册包含在嵌入资源中的脚本更加容易。然而,这些改进没有包含在这个发布版中。

用于授权和异常处理的过滤器类型

该发布版包含两种新的过滤器类型——授权过滤器和异常过滤器。尽管操作过滤器依然是最常见的过滤器类型,但我们希望提供能够在任意或者所有操作过滤器之前运行的过滤器,而不管过滤器的作用域。这样可以防止某些情形的出现,如在Authorization过滤器之前执行OutputCache过滤器,从而导致骗取授权。

为了支持新的过滤器类型,加入或修改了下列特性:

  • 新的IAuthorizationFilterIExceptionFilter接口。授权过滤器可以确保在所有其他操作过滤器之前运行。每个异常过滤器都会执行,即便是某个过滤器指明它已经处理了请求。这有助于记录和处理异常。
  • AuthorizeAttribute类。这是IAuthorizationFilter的默认的具体实现。用于确保操作方法的安全。
  • HandleErrorAttribute类。这是IExceptionFilter的默认的具体实现。用于处理异常并指定在发生异常时呈现哪个视图。
  • 新的FilterAttribute基类。我们和新的过滤器类型一起引入了新的基类,这对所有过滤器特性都是有用的。

输出缓存过滤器

OutputCacheAttribute类是一个新的操作过滤器,用于使用内建的ASP.NET输出缓存来缓存操作方法的输出。

注意

在该发布版中,在Medium信任级别下为输出缓存过滤器设置CacheProfile属性会抛出一个异常。该问题会在未来的发布版中解决。

ASP.NET AJAX的变化

添加了下面的AJAX辅助方法。它们使用AjaxOptions类来指定异步操作的选项。

  • ActionLink。该方法呈现一个指向某操作方法的锚标签。当单击该链接时,会异步地调用操作方法。该辅助方法的典型应用是通过指定AjaxOptions.UpdateTargetId属性获取响应并更新DOM元素。
  • Form。该方法呈现一个可以异步提交的HTML表单。该辅助方法的典型应用是提交表单,和ActionLink类似,通过指定AjaxOptions.UpdateTargetId属性来获取响应并更新DOM元素。

我们将持续为ASP.NET MVC增强AJAX特性。这里提到的特性只是一个初级版本,我们希望在将来的发布版中能提供更强的特性。

路由的命名空间

在ASP.NET MVC之前的预览版中,框架会扫描所有程序集中的类型,以便找到控制器实现。然而,这样做偶尔会抛出异常,如某个类型是从一个尚未加载的程序集中的某个类型继承而来的,则框架在反射该类型时就会出错。

在这个发布中,我们提供了一种途径,能够为框架指定在尝试加载控制器类型时去检查哪些命名空间,这需要使用ControllerBuilder类的DefaultNamespaces属性。下面的示例展示了如何为解析控制器加载命名空间。

你也可以依次为每个路由指定命名空间。(在该发布版中,你还不能使用MapRoute扩展方法来做这件事。)下面的例子展示了如何为一个路由指定命名空间。

TempData的增强可测试性接口

在该发布版中,我们改进了可测试性,你可以使用会话Cookie而不是会话状态。添加了一个新的ITempDataProvider接口。默认情况下,控制器通过SessionStateTempDataProvider来访问会话状态,但现在可以实现其他的提供程序了。

ActionInvoker可扩展改进

添加了新的虚拟方法,在高级场景里你可以扩展调用器。下面的表格列出了新的方法。

方法说明
GetFiltersForActionMethod返回操作方法上的所有过滤器(授权、操作和异常过滤器)。
InvokeActionResultWithFilters在操作方法返回的ActionResult对象上调用ExecuteResult方法,以及应用于该操作方法的所有结果过滤器。
InvokeAuthorizationFilters调用应用于操作方法上的授权过滤器。
InvokeExceptionFilters调用应用于操作方法上的异常过滤器。

ViewDataDictionary

我们对ViewDataDictionary进行了少许修改,将其索引器修改为一般索引器,并添加了Eval方法,用于对模型进行求值。

MVC的未来

ASP.NET MVC团队在日常的开发过程中,为很多特性建立了原型。这些特性有些会包含在RTM发布版中。如果没有包含进去,则可能会包含在未来的完整发布版中。我们将这些特性中的很多都放在了一个单独的MVC Futures项目中了。你会注意到项目模板包含并引用了一个名为Microsoft.Web.Mvc.dll的程序集,这就是MVC Futures项目的编译形式。

注意ComponentControllerRenderComponent方法已经被替换成了MVC Futures项目中定义的RenderAction方法。RenderAction与普通的控制器协作,而不是特定的ComponentController对象。

对于该发布版,MVC Futures程序集(Microsoft.Web.Mvc.dll)被包含在了项目模板中,但在Beta和RTM发布版中就不会这样了。

将现有的Preview3应用程序升级到Preview 4 CodePlex Release

这一部分介绍了要想使使用Preview 3发布版创建的ASP.NET MVC应用程序能够运行在Preview 4发布版上,必须要对应用程序进行的修改。

  • 更新对下列程序集的引用,使其指向新的Preview 4版本的程序集:
    • System.Web.Abstractions
    • System.Web.Routing
    • System.Web.Mvc

    默认情况下,这程序集位于下面的文件夹中:

    %ProgramFiles% \Microsoft ASP.NET\ASP.NET MVC CodePlex Preview 4

  • 由于操作过滤器API有了些许改变,因此如果你编写了自定义的操作过滤器,你需要更新你的代码,匹配新的签名。
  • 为了利用模板中的一些变化,你可能需要将模板的变化复制到你的项目中。

已知问题

posted @ 2008-07-18 16:25  Anders Liu  阅读(2003)  评论(2编辑  收藏  举报