ASP.NET MVC 4 发行说明

本文档介绍 ASP.NET MVC 4 的版本。

安装说明

可以使用 Web 平台安装程序从 ASP.NET MVC 4 主页安装 ASP.NET MVC 4 for Visual Studio 2010。

建议在安装 ASP.NET MVC 4 之前卸载以前安装的 ASP.NET MVC 4 预览版。 无需卸载即可将 ASP.NET MVC 4 Beta 版和候选版本升级到 ASP.NET MVC 4。

此版本与 .NET Framework 4.5 的任何预览版本不兼容。 在安装 ASP.NET MVC 4 之前,必须单独将 .NET Framework 4.5 的任何已安装预览版本升级到最终版本。

ASP.NET MVC 4 可与 ASP.NET MVC 3 并行安装和运行。

文档

ASP.NET MVC 的文档可以在位于以下 URL 的 MSDN 网站上找到:

https://go.microsoft.com/fwlink/?LinkID=243043

有关 ASP.NET MVC 的教程和其他信息,请参阅 ASP.NET 网站的 MVC 4 页面 (https://www.asp.net/mvc/mvc4) 。

支持

ASP.NET MVC 4 完全受支持。 如果你对使用此版本有疑问,还可以将其发布到 ASP.NET MVC 论坛 (https://forums.asp.net/1146.aspx) ,ASP.NET 社区的成员经常可以在该论坛中提供非正式支持。

软件要求

Visual Studio ASP.NET MVC 4 组件需要 PowerShell 2.0 和带有 Service Pack 1 的 Visual Studio 2010 或带有 Service Pack 1 的 Visual Web Developer Express 2010。

ASP.NET MVC 4 中的新增功能

本部分介绍 ASP.NET MVC 4 版本中引入的功能。

ASP.NET Web API

ASP.NET MVC 4 包括 ASP.NET Web API,这是一种用于创建 HTTP 服务的新框架,可覆盖各种客户端,包括浏览器和移动设备。 ASP.NET Web API也是构建 RESTful 服务的理想平台。

ASP.NET Web API包括对以下功能的支持:

  • 新式 HTTP 编程模型: 使用新的强类型 HTTP 对象模型直接访问和操作 Web API 中的 HTTP 请求和响应。 相同的编程模型和 HTTP 管道通过新的 HttpClient 类型在客户端上对称可用。
  • 完全支持路由: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。
  • 改进了可测试性: Web API 操作适用于 HttpRequestMessage 和 HttpResponseMessage 的实例,而不是在静态上下文对象中设置 HTTP 详细信息。 创建单元测试项目以及 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 项目模板:从新建 MVC 4 项目向导中选择新的 Web API 项目,以快速启动并运行 ASP.NET Web API。
  • 脚手架: 使用“ 添加控制器 ”对话框可以根据基于实体框架的模型类型快速搭建 Web API 控制器基架。

有关 ASP.NET Web API的详细信息,请访问 https://www.asp.net/web-api

默认项目模板的增强功能

用于创建新 ASP.NET MVC 4 项目的模板已更新,以创建外观更现代的网站:

新项目模板页的浏览器视图的屏幕截图。

除了外观改进之外,新模板中还改进了功能。 该模板采用一种称为自适应呈现的技术,在桌面浏览器和移动浏览器中看起来都不错,无需任何自定义。

新项目模板页桌面版本的移动浏览器视图的屏幕截图。

若要查看操作中的自适应呈现,可以使用移动仿真器,或者只需尝试将桌面浏览器窗口的大小调整为更小。 当浏览器窗口变小时,页面布局将更改。

移动项目模板

如果你要启动一个新项目,并且想要创建一个专门用于移动和平板电脑浏览器的网站,则可以使用新的移动应用程序项目模板。 这基于 jQuery Mobile,这是一个用于构建触摸优化 UI 的开源库:

移动应用程序项目模板的移动浏览器视图的屏幕截图。

此模板包含与 Internet 应用程序模板相同的应用程序结构 (并且控制器代码) 几乎相同,但它使用 jQuery Mobile 进行了样式设置,使其在基于触摸的移动设备上外观良好且性能良好。 若要详细了解如何构建移动 UI 并设置其样式,请参阅 jQuery Mobile 项目网站

如果你已经有一个面向桌面的网站,你想要向其添加移动优化视图,或者如果你想要创建一个为桌面和移动浏览器提供不同样式的视图的网站,则可以使用新的显示模式功能。 (请参阅下一节。)

显示模式

新的显示模式功能允许应用程序根据发出请求的浏览器选择视图。 例如,如果桌面浏览器请求主页,应用程序可能会使用 Views\Home\Index.cshtml 模板。 如果移动浏览器请求主页,应用程序可能会返回 Views\Home\Index.mobile.cshtml 模板。

对于特定浏览器类型,还可以重写布局和分部。 例如:

  • 如果 Views\Shared 文件夹同时包含 _Layout.cshtml 和 _Layout.mobile.cshtml 模板,则默认情况下,应用程序将在来自移动浏览器的请求期间使用 _Layout.mobile.cshtml,在其他请求期间使用 _Layout.cshtml。
  • 如果文件夹同时包含 _MyPartial.cshtml 和 _MyPartial.mobile.cshtml,则指令 @Html.Partial(“_MyPartial”) 将在来自移动浏览器的请求期间呈现_MyPartial.mobile.cshtml,并在其他请求期间呈现 _MyPartial.cshtml。

如果要为其他设备创建更具体的视图、布局或分部视图,可以注册新的 DefaultDisplayMode 实例,以指定在请求满足特定条件时要搜索的名称。 例如,可以将以下代码添加到 Global.asax 文件中的 Application_Start 方法,以将字符串“iPhone”注册为 Apple iPhone 浏览器发出请求时适用的显示模式:

DisplayModeProvider.Instance.Modes.Insert(0, new
DefaultDisplayMode("iPhone")
{
    ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf
        ("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
});

运行此代码后,当 Apple iPhone 浏览器发出请求时,应用程序将使用 Views\Shared\_Layout.iPhone.cshtml 布局 ((如果存在) )。 有关显示模式的详细信息,请参阅 ASP.NET MVC 4 移动功能。 使用 DisplayModeProvider 的应用程序应安装 固定的 DisplayModes NuGet 包。 ASP.NET 2012 年秋季更新在新项目模板中包含固定的 DisplayModes NuGet 包。 有关 修复的详细信息,请参阅 ASP.NET MVC 4 移动缓存 Bug 已修复

jQuery 移动和移动功能

有关使用 jQuery Mobile 生成具有 ASP.NET MVC 4 的移动应用程序的信息,请参阅教程 ASP.NET MVC 4 移动功能

异步控制器的任务支持

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

有关详细信息,请参阅 在 ASP.NET MVC 4 中使用异步方法

Azure SDK

ASP.NET MVC 4 支持 Windows Azure SDK 的 1.6 及更新版本。

数据库迁移

ASP.NET MVC 4 项目现在包括 Entity Framework 5。 Entity Framework 5 中的一项出色功能是支持数据库迁移。 此功能使你能够使用以代码为中心的迁移轻松改进数据库架构,同时保留数据库中的数据。 有关数据库迁移的详细信息,请参阅 ASP.NET MVC 4 简介教程中的向电影模型添加新字段和表

空项目模板

MVC 空项目模板现在真正为空,因此你可以从一个完全干净的板开始。 空项目模板的早期版本已重命名为“基本”。

将控制器添加到任何项目文件夹

现在可以右键单击并从 MVC 项目中的任何文件夹中选择“ 添加控制器 ”。 这样可以更灵活地根据需要组织控制器,包括将 MVC 和 Web API 控制器保留在单独的文件夹中。

捆绑和缩小

通过捆绑和缩小框架,可以通过将单个文件合并为脚本和 CSS 的单个捆绑文件来减少网页需要发出的 HTTP 请求数。 然后,它可以通过缩小捆绑包的内容来减小这些请求的总体大小。 缩小可以包括消除空格、缩短变量名称甚至基于其语义折叠 CSS 选择器等活动。 捆绑包在代码中声明和配置,并通过帮助程序方法在视图中轻松引用,这些方法可以生成指向捆绑包的单个链接,或者在调试时生成指向捆绑包的各个内容的多个链接。 有关详细信息 ,请参阅捆绑和缩小

使用 OAuth 和 OpenID 从 Facebook 和其他站点启用登录

ASP.NET MVC 4 Internet 项目模板中的默认模板现在支持使用 DotNetOpenAuth 库进行 OAuth 和 OpenID 登录。 有关配置 OAuth 或 OpenID 提供程序的信息,请参阅对 WebForms、MVC 和 WebPages 的 OAuth/OpenID 支持以及 ASP.NET 网页 中的 OAuth 和 OpenID 功能文档

将 ASP.NET MVC 3 项目升级到 ASP.NET MVC 4

ASP.NET MVC 4 可以与 ASP.NET MVC 3 并排安装在同一台计算机上,这使你可以灵活地选择何时将 ASP.NET MVC 3 应用程序升级到 ASP.NET MVC 4。

最简单的升级方法是创建新的 ASP.NET MVC 4 项目,将所有视图、控制器、代码和内容文件从现有 MVC 3 项目复制到新项目,然后更新新项目中的程序集引用,以匹配正在使用的任何非 MVC 模板包含的组件。 如果对 MVC 3 项目中的 Web.config 文件进行了更改,还必须将这些更改合并到 MVC 4 项目中的 Web.config 文件中。

若要手动将现有 ASP.NET MVC 3 应用程序升级到版本 4,请执行以下操作:

  1. 在项目的所有Web.config文件中, (项目根目录中有一个文件,在“视图”文件夹中有一个,在项目) 的每个区域的“视图”文件夹中,替换以下文本的每个实例 (注意:使用 Visual Studio 2012 创建的项目中找不到 System.Web.WebPages, Version=1.0.0.0) :

    System.Web.Mvc, Version=3.0.0.0
    System.Web.WebPages, Version=1.0.0.0
    System.Web.Helpers, Version=1.0.0.0
    System.Web.WebPages.Razor, Version=1.0.0.0
    

    包含以下相应文本:

    System.Web.Mvc, Version=4.0.0.0
    System.Web.WebPages, Version=2.0.0.0
    System.Web.Helpers, Version=2.0.0.0
    System.Web.WebPages.Razor, Version=2.0.0.0
    
  2. 在根Web.config文件中,将 webPages:Version 元素更新为“2.0.0.0”,并添加值为“true”的新 PreserveLoginUrl 键:

    <appSettings>
      <add key="webpages:Version" value="2.0.0.0" />
      <add key="PreserveLoginUrl" value="true" />
    </appSettings>
    
  3. 在“解决方案资源管理器”中,右键单击“引用”,然后选择“管理 NuGet 包”。 在左窗格中,选择“ Online\NuGet 官方包源”,然后更新以下内容:

    • ASP.NET MVC 4
    • (可选) jQuery、jQuery 验证和 jQuery UI
    • (可选) 实体框架
    • (Optonal) Modernizr
  4. 在“解决方案资源管理器”中,右键单击项目名称,然后选择“卸载项目”。 然后再次右键单击该名称,然后选择“编辑 ProjectName.csproj”。

  5. 找到 ProjectTypeGuids 元素,并将 {E53F8FEA-EAE0-44A6-8774-FFD645390401} 替换为 {E3E379DF-F4C6-4180-9B81-6769533ABE47}。

  6. 保存更改,关闭正在编辑的项目 (.csproj) 文件,右键单击该项目,然后选择“重新加载项目”。

  7. 如果项目引用使用以前版本的 ASP.NET MVC 编译的任何第三方库,请打开根Web.config文件,并在配置部分下添加以下三个 bindingRedirect 元素:

    <configuration>
      <!--... elements deleted for clarity ...-->
     
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Helpers" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    

ASP.NET MVC 4 候选版的更改

可在此处找到 ASP.NET MVC 4 候选版本的发行说明:

此版本中 ASP.NET MVC 4 候选版本的主要更改汇总如下:

  • 按控制器配置:可以使用实现 IControllerConfiguration 的自定义属性对 ASP.NET Web API控制器进行属性化,以设置其自己的格式化程序、操作选择器和参数绑定器。 已删除 HttpControllerConfigurationAttribute
  • 每个路由消息处理程序: 现在可以在给定路由的请求链中指定最终消息处理程序。 这使支持沿路框架使用路由将其调度到其自己的 (非 IHttpController) 终结点。
  • 进度通知:ProgressMessageHandler 为正在上传的请求实体和正在下载的响应实体生成进度通知。 使用此处理程序可以跟踪上传请求正文或下载响应正文的距离。
  • 推送内容:PushStreamContent 类支持数据生成者希望直接写入请求或响应 (使用流以同步或异步方式) 的方案。 当 PushStreamContent 准备好接受数据时,它会使用输出流调用操作委托。 然后,开发人员可以根据需要写入流,并在写入完成后关闭流。 PushStreamContent 检测流的关闭并完成用于写出内容的基础异步任务
  • 创建错误响应: 使用 HttpError 类型可以一致地表示验证错误和异常等错误信息,同时仍遵循 IncludeErrorDetailPolicy。 使用新的 CreateErrorResponse 扩展方法轻松创建错误响应,并将 HttpError 作为内容。 HttpError 内容是完全协商的内容。
  • MediaRangeMapping 已删除: 媒体类型范围现在由默认内容协商程序处理。
  • 简单类型参数的默认参数绑定现在为 [FromUri]:在以前版本的 ASP.NET Web API简单类型参数的默认参数绑定使用了模型绑定。 简单类型参数的默认参数绑定现在为 [FromUri]
  • 操作选择遵循所需的参数:ASP.NET Web API 中的操作选择现在仅在提供来自 URI 的所有必需参数时选择操作。 可以通过在操作方法签名中为 参数提供默认值,将参数指定为可选参数。
  • 自定义 HTTP 参数绑定:使用 ParameterBindingAttribute 自定义特定操作参数的参数绑定,或使用 HttpConfiguration 上的 ParameterBindingRules 来更广泛地自定义参数绑定。
  • MediaTypeFormatter 改进: 格式化程序现在有权访问完整的 HttpContent 实例。
  • 主机缓冲策略选择:在 ASP.NET Web API 中实现和配置 IHostBufferPolicySelector 服务,使主机能够在使用缓冲时确定其策略。
  • 以与主机无关的方式访问客户端证书: 使用 GetClientCertificate 扩展方法从请求消息获取提供的客户端证书。
  • 内容协商扩展性: 通过派生自 DefaultContentNegotiator 并重写所需的内容协商的任何方面来自定义内容协商。
  • 支持返回 406 不可接受响应:如果找不到合适的格式化程序,现在可以通过创建 defaultContentNegotiator 并将 excludeMatchOnTypeOnly 参数设置为 true,在 ASP.NET Web API 中返回 406 不可接受的响应。
  • 以 NameValueCollection 或 JToken 的形式读取表单数据:可以分别使用 ParseQueryStringReadAsFormDataAsync 扩展方法将 URI 查询字符串或请求正文中的表单数据作为 NameValueCollection 读取。 同样,可以分别使用 TryReadQueryAsJsonReadAsAsync<T> 扩展方法将 URI 查询字符串或请求正文中的表单数据作为 JToken 读取。
  • 多部分改进: 现在可以编写一个 MultipartStreamProvider ,它完全根据 MIME 多部分数据类型定制,可以读取该数据,并向用户以最佳方式显示结果。 还可以在 MultipartStreamProvider 上挂接后处理步骤,以便实现对 MIME 多部分主体部件执行所需的任何后期处理。 例如, MultipartFormDataStreamProvider 实现读取 HTML 表单数据部件并将其添加到 NameValueCollection ,以便从调用方轻松获取。
  • 链接生成改进:UrlHelper 不再依赖于 HttpControllerContext。 现在可以从 HttpRequestMessage 可用的任何上下文访问 UrlHelper
  • 消息处理程序执行顺序更改: 消息处理程序现在按其配置顺序执行,而不是按相反顺序执行。
  • 用于连接消息处理程序的帮助程序: 新的 HttpClientFactory ,可以连接 DelegatingHandlers 并创建 HttpClient ,并准备好所需的管道。 它还提供与备用内部处理程序 (默认为 HttpClientHandler) 进行连接的功能,以及在使用 HttpMessageInvoker 或其他 DelegatingHandler 而不是 HttpClient 作为顶级调用程序时进行连接。
  • ASP.NET Web 优化中对 CDN 的支持: ASP.NET Web 优化现在支持 CDN 备用路径,使你可以为每个捆绑包指定指向内容分发网络上同一资源的附加 URL。 通过支持 CDN,可以在地理上使脚本和样式捆绑包更接近 Web 应用程序的最终使用者。 当 CDN 不可用时,生产应用应实现回退。 测试回退。
  • ASP.NET Web API路由和配置移动到可在测试代码中重用的 WebApiConfig.Register 静态方法。 ASP.NET Web API路由之前与标准 MVC 路由一起添加到 RouteConfig.RegisterRoutes 中。 默认 ASP.NET Web API路由和配置现在在单独的 WebApiConfig.Register 方法中进行处理,以便于测试。

已知问题和中断性变更

  • 当应返回移动视图时,ASP.NET MVC 4 的 RC 和 RTM 版本错误地返回了缓存的桌面视图。

  • Razor 视图引擎中的中断性变更。 以下类型已从 System.Web.Mvc.Razor 中删除:

    • ModelSpan
    • MvcVBRazorCodeGenerator
    • MvcCSharpRazorCodeGenerator
    • MvcVBRazorCodeParser

    还删除了以下方法:

    • MvcCSharpRazorCodeParser.ParseInheritsStatement (System.Web.Razor.Parser.CodeBlockInfo)
    • MvcWebPageRazorHost.DecorateCodeGenerator (System.Web.Razor.Generator.RazorCodeGenerator)
    • MvcVBRazorCodeParser.ParseInheritsStatement (System.Web.Razor.Parser.CodeBlockInfo)
  • WebMatrix.WebData.dll包含在 ASP.NET MVC 4 应用的 /bin 目录中时,它将接管表单身份验证的 URL。 例如,将WebMatrix.WebData.dll程序集添加到应用程序 (,方法是在使用“添加可部署依赖项”对话框时选择“使用 Razor 语法 ASP.NET 网页”,) 将替代默认 ASP.NET MVC 帐户控制器预期的身份验证登录名重定向到 /account/logon 而不是 /account/login。 若要防止此行为并使用已在 web.config 的身份验证部分中指定的 URL,可以添加名为 PreserveLoginUrl 的 appSetting 并将其设置为 true:

    <appSettings>
        <add key="PreserveLoginUrl" value="true"/>
    </appSettings>
    
  • 尝试为 Visual Studio 2010 和 Visual Web Developer 2010 的并行安装安装 ASP.NET MVC 4 时,NuGet 包管理器无法安装。 若要与 ASP.NET MVC 4 并行运行 Visual Studio 2010 和 Visual Web Developer 2010,必须在已安装两个版本的 Visual Studio 后安装 ASP.NET MVC 4。

  • 如果已卸载先决条件,则卸载 ASP.NET MVC 4 会失败。 若要完全卸载 ASP.NET MVC 4,必须先卸载 ASP.NET MVC 4,然后再卸载 Visual Studio。

  • 安装 ASP.NET MVC 4 中断 ASP.NET MVC 3 RTM 应用程序。 ASP.NET 使用 RTM 版本创建的 MVC 3 应用程序, (与 ASP.NET MVC 3 工具更新 版本) 需要以下更改才能与 ASP.NET MVC 4 并行工作。 在不进行这些更新的情况下生成项目会导致编译错误。

    所需的更新

    1. 在根Web.config文件中,添加一个新的 <appSettings> 条目,其中包含键 webPages:Version 和值 1.0.0.0

      <appSettings>
          <add key="webpages:Version" value="1.0.0.0"/>
          <add key="ClientValidationEnabled" value="true"/>
          <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
      </appSettings>
      
    2. 在解决方案资源管理器中,右键单击项目名称,然后选择“卸载项目”。 然后再次右键单击该名称,并选择“编辑 ProjectName.csproj”。

    3. 找到以下程序集引用:

      <Reference Include="System.Web.WebPages"/> 
      <Reference Include="System.Web.Helpers" />
      

      将它们替换为以下内容:

      <Reference Include="System.Web.WebPages, Version=1.0.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL "/> 
      <Reference Include="System.Web.Helpers, Version=1.0.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
      
    4. 保存更改,关闭正在编辑的项目 (.csproj) 文件,然后右键单击该项目并选择“重新加载”。

  • 将 ASP.NET MVC 4 项目从 4.5 更改为目标 4.0 不会更新 EntityFramework 程序集引用: 如果在面向 4.5 后将 ASP.NET MVC 4 项目更改为目标 4.0,则对 EntityFramework 程序集的引用仍将指向 4.5 版本。 若要解决此问题,请卸载并重新安装 EntityFramework NuGet 包。

  • 403 从 4.5 更改为目标 4.0 后,在 Azure 上运行 ASP.NET MVC 4 应用程序时禁止: 如果在面向 4.5 后将 ASP.NET MVC 4 项目更改为目标 4.0,然后部署到 Azure,可能会在运行时看到“403 禁止访问”错误。 若要解决此问题,请将以下内容添加到web.config: <modules runAllManagedModulesForAllRequests="true" />

  • 在 Razor 文件中的字符串文本中键入“”时,Visual Studio 2012 崩溃。 若要解决此问题,请先输入字符串文本的右引号。

  • 在 Internet 模板中浏览到“帐户/管理”会导致 CHS、TRK 和 CHT 语言出现运行时错误。 若要解决此问题,请修改页面,将其作为强>标记中<的唯一内容来分隔 @User.Identity.Name

  • Azure 网站不支持 Google 和 LinkedIn 提供程序。 部署到 Azure 网站时,请使用备用身份验证提供程序。

  • 将 UriPathExtensionMapping 与 IIS 8 Express/IIS 配合使用时,尝试使用该扩展时将收到 404“找不到”错误。 静态文件处理程序将干扰对使用 UriPathExtensionMappings 的 Web API 的请求。 在 web.config 中设置 runAllManagedModulesForAllRequests=true 以解决此问题。

  • 不再调用 Controller.Execute 方法。 现在,所有 MVC 控制器始终以异步方式执行。