ASP.NET MVC 4 自定义操作筛选器

Web Camp 团队

下载 Web Camp 培训工具包

ASP.NET MVC 提供操作筛选器,用于在调用操作方法之前或之后执行筛选逻辑。 操作筛选器是自定义属性,提供声明性方式,用于将操作前和操作后行为添加到控制器的操作方法。

在本动手实验室中,你将在 MvcMusicStore 解决方案中创建自定义操作筛选器属性,以捕获控制器的请求并将站点的活动记录到数据库表中。 可以通过注入将日志记录筛选器添加到任何控制器或操作。 最后,你将看到显示访问者列表的日志视图。

本动手实验假定你已具备 ASP.NET MVC 的基础知识。 如果你之前未使用 过 ASP.NET MVC ,我们建议你 ASP.NET MVC 4 基础知识 动手实验室。

注意

所有示例代码和代码片段都包含在 Web Camp 培训工具包中,可从 Microsoft-Web/WebCampTrainingKit 版本获取。 特定于此实验室的项目 ASP.NET MVC 4 自定义操作筛选器中提供。

目标

在本Hands-On实验室中,你将了解如何:

  • 创建自定义操作筛选器属性以扩展筛选功能
  • 通过注入将自定义筛选器属性应用于特定级别
  • 全局注册自定义操作筛选器

先决条件

必须具有以下各项才能完成本实验室:

设置

安装代码片段

为方便起见,你将在本实验室中管理的大部分代码都以 Visual Studio 代码片段的形式提供。 若要安装代码片段,请运行 .\Source\Setup\CodeSnippets.vsi 文件。

如果不熟悉Visual Studio Code代码段,并且想要了解如何使用它们,可以参考本文档“附录 C:使用代码片段”中的附录。


练习

本Hands-On实验室由以下练习组成:

  1. 练习 1:日志记录操作
  2. 练习 2:管理多个操作筛选器

完成本实验室的估计时间: 30 分钟

注意

每个练习都附带一个 End 文件夹,其中包含在完成练习后应获取的结果解决方案。 如果需要完成练习的其他帮助,可以使用此解决方案作为指导。

练习 1:日志记录操作

在本练习中,你将了解如何使用 ASP.NET MVC 4 筛选器提供程序创建自定义操作日志筛选器。 为此,你将向 MusicStore 网站应用日志记录筛选器,该筛选器将记录所选控制器中的所有活动。

筛选器将扩展 ActionFilterAttributeClass 并重写 OnActionExecuting 方法以捕获每个请求,然后执行日志记录操作。 有关 HTTP 请求、执行方法、结果和参数的上下文信息将由 ASP.NET MVC ActionExecutingContext 类提供

注意

ASP.NET MVC 4 还具有默认筛选器提供程序,无需创建自定义筛选器即可使用。 ASP.NET MVC 4 提供以下类型的筛选器:

  • 授权 筛选器,用于决定是否执行操作方法(例如执行身份验证或验证请求的属性)的安全决策。
  • 操作 筛选器,用于包装操作方法执行。 此筛选器可以执行其他处理,例如向操作方法提供额外数据、检查返回值或取消操作方法的执行
  • 结果 筛选器,用于包装 ActionResult 对象的执行。 此筛选器可以执行结果的其他处理,例如修改 HTTP 响应。
  • 异常 筛选器,在操作方法中某个位置引发未经处理的异常时执行,从授权筛选器开始,以结果执行结束。 异常筛选器可用于执行诸如日志记录或显示错误页之类的任务。

有关筛选器提供程序的详细信息,请访问此 MSDN 链接: (https://msdn.microsoft.com/library/dd410209.aspx) 。

关于 MVC 音乐应用商店应用程序日志记录功能

此 Music Store 解决方案具有用于网站日志记录的新数据模型表 ActionLog,其中包含以下字段:接收请求的控制器的名称、调用的操作、客户端 IP 和时间戳。

数据模型。ActionLog 表。

数据模型 - ActionLog 表

该解决方案为可在 MvcMusicStores/Views/ActionLog 中找到的操作日志提供 ASP.NET MVC 视图:

操作日志视图

操作日志视图

使用此给定结构,所有工作都将侧重于中断控制器的请求,并使用自定义筛选执行日志记录。

任务 1 - 创建自定义筛选器以捕获控制器的请求

在此任务中,你将创建一个包含日志记录逻辑的自定义筛选器属性类。 为此,你将扩展 ASP.NET MVC ActionFilterAttribute 类并实现接口 IActionFilter

注意

ActionFilterAttribute 是所有属性筛选器的基类。 它提供以下方法,用于在控制器操作执行之后和之前执行特定逻辑:

  • OnActionExecuting (ActionExecutingContext filterContext) :就在调用操作方法之前。
  • OnActionExecuted (ActionExecutedContext filterContext) :在调用操作方法之后以及执行结果之前 (视图呈现) 之前。
  • OnResultExecuting (ResultExecutingContext filterContext) :在视图呈现) 之前 (执行结果之前。
  • OnResultExecuted (ResultExecutedContext filterContext) :执行结果后 (视图呈现) 。

通过将这些方法中的任何一个重写为派生类,可以执行自己的筛选代码。

  1. 打开位于\Source\Ex01-LoggingActions\Begin 文件夹的 Begin 解决方案。

    1. 在继续之前,需要下载一些缺少的 NuGet 包。 为此,请单击“ 项目 ”菜单并选择“ 管理 NuGet 包”。

    2. “管理 NuGet 包 ”对话框中,单击“ 还原 ”以下载缺少的包。

    3. 最后,单击“生成 | 解决方案”生成解决方案

      注意

      使用 NuGet 的优点之一是无需交付项目中的所有库,从而减少了项目大小。 使用 NuGet Power Tools,通过在 Packages.config 文件中指定包版本,你将能够在首次运行项目时下载所有必需的库。 这就是在打开本实验室中的现有解决方案后,必须运行这些步骤的原因。

      有关详细信息,请参阅此文: https://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

  2. 将新的 C# 类添加到 Filters 文件夹中,并将其命名为 CustomActionFilter.cs。 此文件夹将存储所有自定义筛选器。

  3. 打开 CustomActionFilter.cs 并添加对 System.Web.MvcMvcMusicStore.Models 命名空间的引用:

    (代码片段 - ASP.NET MVC 4 自定义操作筛选器 - Ex1-CustomActionFilterNamespaces)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using MvcMusicStore.Models;
    
  4. ActionFilterAttribute 继承 CustomActionFilter 类,然后使 CustomActionFilter 类实现 IActionFilter 接口。

    //...
    namespace MvcMusicStore.Filters
    {
        public class CustomActionFilter : ActionFilterAttribute, IActionFilter
        {
            //...
        }
    }
    
  5. 使 CustomActionFilter 类重写 OnActionExecuting 方法,并添加必要的逻辑来记录筛选器的执行。 为此,请在 CustomActionFilter 类中添加以下突出显示的代码。

    (代码片段 - ASP.NET MVC 4 自定义操作筛选器 - Ex1-LoggingActions)

    public class CustomActionFilter : ActionFilterAttribute, IActionFilter
    {
        void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
        {
            // TODO: Add your action filter's tasks here
    
            // Log Action Filter call
            using (MusicStoreEntities storeDb = new MusicStoreEntities())
            {
                ActionLog log = new ActionLog()
                {
                    Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
                    Action = string.Concat(filterContext.ActionDescriptor.ActionName, " (Logged By: Custom Action Filter)"),
                    IP = filterContext.HttpContext.Request.UserHostAddress,
                    DateTime = filterContext.HttpContext.Timestamp
                };
                storeDb.ActionLogs.Add(log);
                storeDb.SaveChanges();
                OnActionExecuting(filterContext);
            }
        }
    }
    

    注意

    OnActionExecuting 方法使用 Entity Framework 添加新的 ActionLog 寄存器。 它使用 filterContext 中的上下文信息创建并填充新的实体实例。

    有关 ControllerContext 类的详细信息,请参阅 msdn

任务 2 - 将代码侦听器注入 Store 控制器类

在此任务中,你将通过将自定义筛选器注入到将记录的所有控制器类和控制器操作来添加该筛选器。 在本练习中,存储控制器类将具有日志。

调用注入的元素时,将运行来自 ActionLogFilterAttribute 自定义筛选器的 OnActionExecuting 方法。

还可以截获特定的控制器方法。

  1. MvcMusicStore\Controllers 处打开 StoreController,并添加对 Filters 命名空间的引用:

    using System.Linq;
    using System.Web.Mvc;
    using MvcMusicStore.Models;
    using MvcMusicStore.Filters;
    
  2. 通过在类声明之前添加 [CustomActionFilter] 属性,将自定义筛选器 CustomActionFilter 注入 StoreController 类。

    ...
    [CustomActionFilter]
    public class StoreController : Controller
    {
        ...
    }
    

    注意

    将筛选器注入控制器类时,也会注入其所有操作。 如果只想为一组操作应用筛选器,则必须将 [CustomActionFilter] 注入其中每个操作:

    [CustomActionFilter]
    public ActionResult Index()
    {
      ...
    }
    
    [CustomActionFilter]
    public ActionResult Browse(string genre)
    {
      ...
    }
    

任务 3 - 运行应用程序

在此任务中,你将测试日志记录筛选器是否正常工作。 将启动应用程序并访问存储,然后检查记录的活动。

  1. F5 运行该应用程序。

  2. 浏览到 /ActionLog 以查看日志视图初始状态:

    屏幕截图显示页面活动前的操作日志状态。

    页面活动前的日志跟踪器状态

    注意

    默认情况下,它始终显示检索菜单的现有流派时生成的一项。

    为简单起见,我们将在每次应用程序运行时清理 ActionLog 表,以便它仅显示每个特定任务验证的日志。

    可能需要从 Global.asax 类) 的 Session_Start 方法 (中删除以下代码,以便保存存储控制器中执行的所有操作的历史日志。

    // Clean up Logs Table
    MusicStoreEntities storeDB = new MusicStoreEntities();
    foreach (var log in 
    
    storeDB.ActionLogs.ToList())
    {
       storeDB.ActionLogs.Remove(log);
    }
    
    storeDB.SaveChanges();
    
  3. 单击菜单中的 “流派” 之一,并在那里执行一些操作,例如浏览可用的相册。

  4. 浏览到 /ActionLog ,如果日志为空,请按 F5 刷新页面。 检查是否已跟踪你的访问:

    屏幕截图显示操作日志,可在其中验证访问情况。

    记录活动的操作日志

练习 2:管理多个操作筛选器

在本练习中,你将向 StoreController 类添加第二个自定义操作筛选器,并定义两个筛选器的执行顺序。 然后,将更新代码以注册筛选器全局。

定义筛选器的执行顺序时,需要考虑不同的选项。 例如,Order 属性和 Filters 的作用域:

可以为每个筛选器定义 一个作用域 ,例如,可以将所有操作筛选器的范围限定为在 控制器作用域内运行,并将所有授权筛选器限定为在 全局范围内运行。 作用域具有定义的执行顺序。

此外,每个操作筛选器都有一个 Order 属性,用于确定筛选器范围内的执行顺序。

有关自定义操作筛选器执行顺序的详细信息,请访问此 MSDN 文章: (https://msdn.microsoft.com/library/dd381609(v=vs.98).aspx) 。

任务 1:创建新的自定义操作筛选器

在此任务中,你将创建新的自定义操作筛选器以注入到 StoreController 类中,了解如何管理筛选器的执行顺序。

  1. 打开位于\Source\Ex02-ManagingMultipleActionFilters\Begin 文件夹的 Begin 解决方案。 否则,可以继续使用通过完成上一练习获取的 End 解决方案。

    1. 如果打开了提供的 Begin 解决方案,则需要下载一些缺少的 NuGet 包,然后才能继续。 为此,请单击“ 项目 ”菜单,然后选择“ 管理 NuGet 包”。

    2. “管理 NuGet 包 ”对话框中,单击“ 还原 ”以下载缺少的包。

    3. 最后,单击“生成 | 解决方案”生成解决方案

      注意

      使用 NuGet 的优点之一是,无需交付项目中的所有库,从而减小了项目大小。 使用 NuGet Power Tools,通过在 Packages.config 文件中指定包版本,你将能够在首次运行项目时下载所有必需的库。 这就是在从本实验室打开现有解决方案后必须运行这些步骤的原因。

      有关详细信息,请参阅此文: https://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

  2. 将新的 C# 类添加到 Filters 文件夹中,并将其命名为 MyNewCustomActionFilter.cs

  3. 打开 MyNewCustomActionFilter.cs 并添加对 System.Web.MvcMvcMusicStore.Models 命名空间的引用:

    (代码片段 - ASP.NET MVC 4 自定义操作筛选器 - Ex2-MyNewCustomActionFilterNamespaces)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using MvcMusicStore.Models;
    
  4. 将默认类声明替换为以下代码。

    (代码片段 - ASP.NET MVC 4 自定义操作筛选器 - Ex2-MyNewCustomActionFilterClass)

    public class MyNewCustomActionFilter : ActionFilterAttribute, IActionFilter
    {
      void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
    
      {
            // TODO: Add your acction filter's tasks here
    
            // Log Action Filter Call
            MusicStoreEntities storeDB = new MusicStoreEntities();
    
            ActionLog log = new ActionLog()
            {
                 Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
                 Action = filterContext.ActionDescriptor.ActionName + " (Logged By: 
    
    MyNewCustomActionFilter)",
                 IP = filterContext.HttpContext.Request.UserHostAddress,
                 DateTime = filterContext.HttpContext.Timestamp
            };
    
            storeDB.ActionLogs.Add(log);
            storeDB.SaveChanges();
    
            this.OnActionExecuting(filterContext);
      }
    }
    

    注意

    此自定义操作筛选器与在上一练习中创建的筛选器几乎相同。 main区别在于,它已使用此新类的名称更新了“Logged By”属性,以标识注册日志的筛选器。

任务 2:将新的代码侦听器注入 StoreController 类

在此任务中,你将向 StoreController 类添加新的自定义筛选器,并运行解决方案以验证两个筛选器如何协同工作。

  1. 打开位于 MvcMusicStore\ControllersStoreController 类,并将新的自定义筛选器 MyNewCustomActionFilter 注入 StoreController 类,如以下代码所示。

    [MyNewCustomActionFilter]
    [CustomActionFilter]
    public class StoreController : Controller
    {
    ...
    }
    
  2. 现在,运行应用程序以查看这两个自定义操作筛选器的工作原理。 为此,请按 F5 并等待应用程序启动。

  3. 浏览到 /ActionLog 以查看日志视图初始状态。

    屏幕截图显示操作日志跟踪器处于初始状态。

    页面活动前的日志跟踪器状态

  4. 单击菜单中的 “流派” 之一,并在那里执行一些操作,例如浏览可用的相册。

  5. 检查这次是否为 ;你的访问被跟踪了两次:针对 在 StorageController 类中添加的每个自定义操作筛选器跟踪一次。

    屏幕截图显示“操作日志”,其中跟踪了两次访问。

    记录活动的操作日志

  6. 关闭浏览器。

任务 3:管理筛选器排序

在此任务中,你将了解如何使用 Order 属性管理筛选器的执行顺序。

  1. 打开位于 MvcMusicStore\ControllersStoreController 类,并在两个筛选器中指定 Order 属性,如下所示。

    [MyNewCustomActionFilter(Order = 2)]
    [CustomActionFilter(Order = 1)]
    public class StoreController : Controller
    {
    ...
    }
    
  2. 现在,根据 Order 属性的值验证筛选器的执行方式。 你会发现 CustomActionFilter) 具有最小 Order 值 (筛选器是执行的第一个筛选器。 按 F5 并等待应用程序启动。

  3. 浏览到 /ActionLog 以查看日志视图初始状态。

    屏幕截图显示页面活动前的操作日志。

    页面活动前的日志跟踪器状态

  4. 单击菜单中的 “流派” 之一,并在那里执行一些操作,例如浏览可用的相册。

  5. 检查这次访问是否按筛选器的 Order 值( CustomActionFilter 日志)进行了跟踪。

    屏幕截图显示“操作日志”,其中包含由 CustomActionFilter 排序的活动。

    记录活动的操作日志

  6. 现在,你将更新筛选器的订单值并验证日志记录顺序的更改方式。 在 StoreController 类中,更新筛选器的 Order 值,如下所示。

    [MyNewCustomActionFilter(Order = 1)]
    [CustomActionFilter(Order = 2)]
    public class StoreController : Controller
    {
    ...
    }
    
  7. F5 再次运行应用程序。

  8. 单击菜单中的 “流派” 之一,并在那里执行一些操作,例如浏览可用的相册。

  9. 检查这次是否首先显示 MyNewCustomActionFilter 筛选器创建的日志。

    屏幕截图显示操作日志,其中包含由指定筛选器首先创建的日志。

    记录活动的操作日志

任务 4:全局注册筛选器

在此任务中,你将更新解决方案,将 MyNewCustomActionFilter) (新筛选器注册为全局筛选器。 通过执行此操作,它将由在应用程序中执行的所有操作触发,而不仅仅是在 StoreController 中触发,就像在上一个任务中一样。

  1. StoreController 类中,从 [CustomActionFilter] 中删除 [MyNewCustomActionFilter] 属性和 order 属性。 该消息应类似于:

    [CustomActionFilter]
    public class StoreController : Controller
    {
    ...
    }
    
  2. 打开 Global.asax 文件并找到 Application_Start 方法。 请注意,每次应用程序启动时,它都会通过在 FilterConfig 类中调用 RegisterGlobalFilters 方法来注册全局筛选器。

    在 Global.asax 中注册全局筛选器

    在 Global.asax 中注册全局筛选器

  3. 打开 App_Start 文件夹中的FilterConfig.cs 文件。

  4. 添加对使用 System.Web.Mvc 的引用;使用 MvcMusicStore.Filters;命名 空间。

    using System.Web.Mvc;
    using MvcMusicStore.Filters;
    
  5. 更新 RegisterGlobalFilters 方法,添加自定义筛选器。 为此,请添加突出显示的代码:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new MyNewCustomActionFilter());
    }
    
  6. 按 F5 运行应用程序

  7. 单击菜单中的 “流派” 之一,并在那里执行一些操作,例如浏览可用的相册。

  8. 检查 [ MyNewCustomActionFilter] 是否也注入到 HomeController 和 ActionLogController 中。

    屏幕截图显示了操作日志,可在其中检查新的自定义筛选器。

    记录全局活动的操作日志

注意

此外,可以按照 附录 B:使用 Web 部署发布 ASP.NET MVC 4 应用程序,将此应用程序部署到 Windows Azure 网站。


总结

通过完成本Hands-On实验室,你已了解如何扩展操作筛选器以执行自定义操作。 你还了解了如何将任何筛选器注入页面控制器。 使用了以下概念:

  • 如何使用 ASP.NET MVC ActionFilterAttribute 类创建自定义操作筛选器
  • 如何将筛选器注入 ASP.NET MVC 控制器
  • 如何使用 Order 属性管理筛选器排序
  • 如何全局注册筛选器

附录 A:安装 Visual Studio Express 2012 for Web

可以使用 Microsoft Web 平台安装程序 安装 Microsoft Visual Studio Express 2012 for Web 或其他“Express”版本。 以下说明将指导你完成使用 Microsoft Web 平台安装程序 安装 Visual Studio Express 2012 for Web 所需的步骤。

  1. 转到 https://go.microsoft.com/?linkid=9810169 。 或者,如果已安装 Web 平台安装程序,则可以打开它并搜索产品“Visual Studio Express 2012 for Web with Windows Azure SDK”。

  2. 单击“ 立即安装”。 如果没有 Web 平台安装程序 ,将重定向到先下载并安装它。

  3. Web 平台安装程序打开后,单击“安装”开始安装。

    安装 Visual Studio Express

    安装 Visual Studio Express

  4. 阅读所有产品的许可证和条款,然后单击“ 我接受 ”继续。

    接受许可条款

    接受许可条款

  5. 等待下载和安装过程完成。

    安装进度

    安装进度

  6. 安装完成后,单击“ 完成”。

    安装已完成

    安装已完成

  7. 单击“ 退出 ”关闭 Web 平台安装程序。

  8. 若要打开 web Visual Studio Express,请转到“开始”屏幕并开始编写“VS Express”,然后单击 VS Express for Web 磁贴。

    VS Express for Web 磁贴

    VS Express for Web 磁贴

附录 B:使用 Web 部署发布 ASP.NET MVC 4 应用程序

本附录将介绍如何从 Windows Azure 管理门户创建新网站,并利用 Windows Azure 提供的 Web 部署发布功能,发布通过实验室获取的应用程序。

任务 1 - 从 Windows Azure 门户创建新网站

  1. 转到 Windows Azure 管理门户 ,并使用与订阅关联的 Microsoft 凭据登录。

    注意

    借助 Windows Azure,可以免费托管 10 个 ASP.NET 网站,然后随着流量的增长而缩放。 可以 在此处注册。

    登录到 Windows Azure 门户

    登录到 Microsoft Azure 管理门户

  2. 单击命令栏上的“ 新建 ”。

    创建新网站

    创建新网站

  3. 单击“ 计算 | 网站”。 然后选择“ 快速创建 ”选项。 提供新网站的可用 URL,然后单击“ 创建网站”。

    注意

    Windows Azure 网站是在云中运行的 Web 应用程序的主机,可以控制和管理。 使用“快速创建”选项,可以从门户外部将已完成的 Web 应用程序部署到 Windows Azure 网站。 它不包括设置数据库的步骤。

    使用快速创建创建新网站

    使用“快速创建”创建新网站

  4. 等到创建新 网站

  5. 创建网站后,单击 URL 列下的链接。 检查新网站是否正常工作。

    浏览到新网站

    浏览到新网站

    运行网站的网站

    网站正在运行

  6. 返回门户并单击“名称”列下的网站名称以显示管理页。

    打开网站管理页

    打开网站管理页

  7. “仪表板” 页的 “快速概览 ”部分下,单击“ 下载发布配置文件 ”链接。

    注意

    发布配置文件包含将 Web 应用程序发布到 Windows Azure 网站的每种已启用发布方法所需的全部信息。 发布配置文件包含有连接到并且验证该发布方法启用的每个端点所需的 URL、用户凭据和数据库字符串。 Microsoft WebMatrix 2Microsoft Visual Studio Express for WebMicrosoft Visual Studio 2012 支持读取发布配置文件,以自动配置这些程序,以便将 Web 应用程序发布到 Windows Azure 网站。

    下载网站发布配置文件

    下载网站发布配置文件

  8. 将发布配置文件下载到已知位置。 在本练习中,你将了解如何使用此文件从 Visual Studio 将 Web 应用程序发布到 Windows Azure 网站。

    保存发布配置文件

    保存发布配置文件

任务 2 - 配置数据库服务器

如果应用程序使用SQL Server数据库,则需要创建SQL 数据库服务器。 如果要部署不使用 SQL Server的简单应用程序,可以跳过此任务。

  1. 需要一个SQL 数据库服务器来存储应用程序数据库。 可以在 Windows Azure 管理门户中的 Sql 数据库服务器 | | 服务器的仪表板中查看SQL 数据库服务器。 如果尚未创建服务器,可以使用命令栏上的“ 添加” 按钮创建一个服务器。 记下 服务器名称和 URL、管理员登录名和密码,因为你将在下一个任务中使用它们。 请勿创建数据库,因为将在后续阶段创建数据库。

    SQL 数据库服务器仪表板

    SQL 数据库服务器仪表板

  2. 在下一个任务中,你将测试来自 Visual Studio 的数据库连接,因此,需要在服务器的 “允许的 IP 地址”列表中包括本地 IP 地址。 为此,请单击“ 配置”,从“ 当前客户端 IP 地址”中选择 IP 地址 ,并将其粘贴到“ 开始 IP 地址 ”和“ 结束 IP 地址 ”文本框中,然后单击“ add-client-ip-address-ok-”按钮

    添加客户端 IP 地址

    添加客户端 IP 地址

  3. “客户端 IP 地址 ”添加到“允许的 IP 地址”列表后,单击“ 保存 ”以确认更改。

    确认更改

    确认更改

任务 3 - 使用 Web 部署发布 ASP.NET MVC 4 应用程序

  1. 返回 ASP.NET MVC 4 解决方案。 在解决方案资源管理器,右键单击网站项目,然后选择“发布”。

    发布应用程序

    发布网站

  2. 导入在第一个任务中保存的发布配置文件。

    导入发布配置文件

    导入发布配置文件

  3. 单击“ 验证连接”。 验证完成后,单击“ 下一步”。

    注意

    在“验证连接”按钮旁边显示绿色复选标记后,验证已完成。

    验证连接

    验证连接

  4. “设置” 页的“ 数据库 ”部分下,单击数据库连接的文本框旁边的按钮, (即 DefaultConnection) 。

    Web 部署配置

    Web 部署配置

  5. 按如下所示配置数据库连接:

    • “服务器名称”中,使用 tcp: 前缀键入SQL 数据库服务器 URL。

    • “用户名” 中,键入服务器管理员登录名。

    • “密码” 中,键入服务器管理员登录密码。

    • 键入新的数据库名称。

      配置目标连接字符串

      配置目标连接字符串

  6. 。 当系统提示创建数据库时,单击“ ”。

    创建数据库

    创建数据库

  7. 用于连接到 Windows Azure 中SQL 数据库的连接字符串显示在“默认连接”文本框中。 然后单击“下一步”。

    指向 SQL 数据库 SQL 数据库 的连接字符串

    指向SQL 数据库的连接字符串

  8. “预览 ”页中,单击“ 发布”。

    发布 Web 应用程序

    发布 Web 应用程序

  9. 发布过程完成后,默认浏览器将打开已发布的网站。

附录 C:使用代码片段

使用代码片段时,你只需触手可及的所有代码。 实验室文档将确切地告诉你何时可以使用它们,如下图所示。

使用 Visual Studio 代码片段将代码插入到项目中

使用 Visual Studio 代码片段将代码插入到项目中

若要使用键盘 (C# 添加代码片段,请仅)

  1. 将光标置于要插入代码的位置。
  2. 开始键入代码片段名称 (,) 不带空格或连字符。
  3. 观看 IntelliSense 显示匹配的代码片段名称。
  4. 选择正确的代码段 (或继续键入,直到) 选择整个代码段的名称。
  5. 按 Tab 键两次,将代码片段插入光标位置。

开始键入代码段名称

开始键入代码片段名称

按 Tab 选择突出显示的代码段

按 Tab 选择突出显示的代码段

再次按 Tab,代码段将

再次按 Tab,代码片段将展开

若要使用鼠标 (C#、Visual Basic 和 XML 添加代码片段,) 1. 右键单击要插入代码片段的位置。

  1. 选择“ 插入代码段 ”,然后选择 “我的代码片段”。
  2. 通过单击从列表中选择相关代码片段。

右键单击要插入代码段的位置,然后选择“插入代码段

右键单击要插入代码片段的位置,然后选择“插入代码段”

从列表中选择相关代码段,方法是单击它

从列表中选择相关代码片段,方法是单击它