二、构建您的第一个 ASP.NET Core 应用

不管你是经验丰富的 ASP.NET 开发人员或对控制器方法有点生疏,最好的方法是在 ASP 上获得最新的速度.NET Core 使用了Hello World应用。 除了新的配置文件之外,还需要了解新的项目类型。

超越它对 IIS 或 IIS Express 的传统依赖,您的新的 ASP.NET web 应用也可以在没有 web 服务器的情况下自托管。 这种新模式是其跨平台抱负的基础。

在本章中,我们将讨论以下原则和概念,以帮助您熟悉 ASP 的基本结构.NET Core 应用:

  • 项目模板
  • 模型、视图和控制器
  • 网络配置

Visual Studio 2015 中的项目模板

在 Visual Studio 2015 中,让自己接触到新项目模板的最快方法就是开始使用它们。 ASP.NET Core,目前有三个项目模板可以使用。

启动 Visual Studio 2015,然后点击File|New|Project。 在Visual c#|Web模板中,选择一个 ASP 模板.NET Core Web 应用继续。 在 Core 1.0 版本中,有两个不同的版本:一个使用全新的。net Core 运行时,另一个使用完整的。net 框架,如下图所示:

Project templates in Visual Studio 2015

在预发布版本中,有其他项目类型可以作为Web模板使用。 这些现在都列在。net Core 下面,如下所示:

  • ASP。 净的 Web 应用
  • 类库(包)
  • 控制台应用(包)

项目模板的 ASP.NET Core 1.0 创建了一个控制台应用,该应用在Program.cs文件中有一个Main方法作为其入口点。 这类似于您可能已经熟悉的其他控制台应用。 当你继续使用任何 ASP.NET Core 选项,迎接你的将是全新的 asp.net.NET Core 模板。 下面的屏幕截图显示了ASP 下可用的项目模板.NET Core 模板:

Project templates in Visual Studio 2015

新模板如下:

  • Web API
  • Web 应用

您将注意到在新模板列表中没有 Web Forms。 正如在第一章中所提到的,ASP 入门。 asp.net Core,新的 ASP. NET Core NET 更喜欢 MVC 而不是 Web 表单,它在跨平台实现中避免使用 MVC。

空模板

使用一些较老版本 Visual Studio 的开发人员的一个常见抱怨是:Empty模板不够空。 结果,这些开发人员将以空的模板开始,只是开始剥离新创建项目的组件。

这在 Visual Studio 2013 中得到了改进,并在 Visual Studio 2015 中继续发挥预期的作用。 选择选项可以确保你拥有一个只够启动的基本项目,如下图所示:

Empty template

在一个空的模板项目中,您可以识别以下项目:

  • 物业
  • 文献
  • wwwroot(web 根目录)
  • 依赖项(初始为空)
  • Program.cs(包含Main入口点方法)
  • 项目。 json(最小设置)
  • (关于 ASP. html 的信息) 净核心) *Startup.cs:
    • ConfigureServices()
    • Configure()
    • Main() 网络。 配置(仅用于 IIS 启动; 使用基于 json 的文件进行配置)*

**## Web API 模板

ASP.NET Web API 模板是由 asp.net 发布的.NET MVC 4 在 2012 年。 它让 ASP.NET 开发人员可以轻松构建供 web 或移动客户端使用的 HTTP 服务。 ASP.NET Core MVC,开发人员可以在 MVC 项目中构建 Web API 时享受更精简的体验。

Web API 模板是为您的 Web 项目创建 RESTful HTTP 服务的一个很好的起点。 选择 Web API 项目模板将比空模板提供更多信息。 一个 Web API 项目的结构如下图所示:

Web API template

在一个 Web API 模板项目中,你可以识别以下项目:

  • (Project) Properties
    • 启动设置。 json
  • 文献
  • wwwroot(web 根目录)
  • 依赖项(初始为空)
  • Controllers folder
    • ValuesController.cs
  • app 设置 json(最小设置)
  • Program.cs(包含Main入口点方法)
  • 项目。 json(基本设置和引用)
  • (关于 ASP. html 的信息) 净核心) *Startup.cs
    • 构造器
    • ConfigureServices()
    • Configure()**

**除了空模板之外,Web API 模板还有以下附加项:

  • ValuesController.cs
  • app 设置 json

Web 应用模板

与其他模板相比,Web Application 模板提供了更多的初始代码和内容。 这是学习 ASP 的来龙去路的一个很好的起点。 净的核心。 在使用此 web 模板时,单击Change Authentication按钮以包括Individual User Accounts作为您的初学者应用的身份验证类型。 Web Application 项目的结构如下图所示:

Web Application template

在 Web Site 模板项目中,您可以标识以下项目。 首先,在你的项目文件夹上方有一些顶级项目:

  • (Project) Properties
    • 启动设置。 json
  • 文献
  • wwwroot
    • css
    • 图像
    • js
    • lib
    • _references.js
    • 图标图标
  • Dependencies
    • Bower(适用于BootstrapjQuery等)

接下来,你的代码、MVC 组件和 DB 迁移有几个文件夹,如下所示:

  • Controllers folder
    • 每个控制器的类文件
  • Data
    • 用于初始迁移的 Migrations 子文件夹
    • DB 上下文快照
  • Models
    • ModelsViewModels
  • Services
    • 服务类,例如用于消息传递和电子邮件
  • Views
    • 视图组织在每个控制器的子文件夹中
    • 共同的观点
    • _ViewImports.cshtml(视图共享导入)
    • _ViewStart.cshtml(共享视图头)

最后,有几个 JSON 配置文件和几个.cs代码文件,如appsettings.jsonbundleconfig.jsProgram.csproject.jsonProject_Readme.htmlStartup.cs:

  • appsettings.json(app 设置,如连接字符串)
  • bundleconfig.json(捆绑和小型化配置)
  • Program.cs(入点用Main法)
  • project.json(项目设置,服务器端引用)
  • Project_Readme.html(关于 ASP 的信息。 净核心)
  • Startup.cs
    • 构造器
    • ConfigureServices()
    • Configure()
  • web.config(仅用于 IIS 启动; 使用基于 json 的文件进行配置)

您可能必须单击解决方案资源管理器中的显示所有文件图标,以查看最初可能隐藏的其他文件。

你好,ASP.NET -你的第一个 ASP。 网络应用

大多数编程书籍和教程都会帮助您开始使用 Hello World 应用。 这指的是一个简单的应用,它具有应用的所有基本元素,使其能够在您的环境中运行。 如果应用可以在屏幕上显示 Hello World,那么就成功地设置了它。

创建一个新的 ASP.NET web 应用项目,并选择本章前面描述的 Empty 模板。 这应该为您的 Hello World 应用提供一个基本模板。

写一篇文章

默认情况下,空模板包含一个带有Configure()方法的Startup.cs类。 该方法应该有一行代码将Hello World写入 HTTP 响应输出流,以便在浏览器中显示。 下面的代码是针对Configure()方法的:

public void Configure(IApplicationBuilder app, 
    IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    loggerFactory.AddConsole(); 
    if (env.IsDevelopment()) 
    { 
        app.UseDeveloperExceptionPage(); 
    } 
    app.Run(async (context) => 
    { 
        await context.Response.WriteAsync("Hello World!"); 
    }); 
} 

通过启用静态文件、Identity、MVC 等,可以使用Configure()方法来配置 HTTP 请求管道。 它可以用于在Startup.cs类中设置默认路由,取代需要global.asax文件的情况。

注意,Configure()方法是在ConfigureServices()方法之后调用的,它可以用来添加各种服务,如实体框架、身份和 MVC。 这两个方法都由运行时调用。

要更改正在显示的文本,只需将Hello World!替换为Hello, ASP.NET Core!。 此文本更改在功能上与 Empty 模板提供的内容没有任何不同,但它确实向您公开了Startup类及其方法。

启动应用

要启动应用,请按键盘上的F5,或在Debug菜单中单击开始调试。 这应该会在默认的 web 浏览器中启动应用,如下图所示:

Launching the application

您可能还熟悉 Visual Studio 工具栏上的绿色Play按钮,它用于启动您的应用。 在 Visual Studio 2015 中,这个按钮提供了一些新的选择,如下图所示:

Launching the application

选择如下:

  • IIS Express:在默认浏览器中启动的默认选项
  • 内部 Web 主机:以项目名称命名
  • web、gen、ef、其他:各种命令,通过project.json文件进行配置
  • 使用浏览:更改默认浏览器或添加新浏览器

您可能已经注意到,在调试时可以选择不同的 web 浏览器。 只需浏览浏览器列表,选择不同的浏览器进行调试,如下图所示:

Launching the application

还可以在解决方案资源管理器中右键单击项目以访问其属性。 在项目属性面板中,单击Debug选项卡,进一步定制每个调试配置文件,如下图所示:

Launching the application

Web 文件和文件夹

现在让我们深入研究 Web Application 模板项目中的所有这些文件和文件夹,以了解它们的用途。 首先,我们将关注配置文件,从bower.json开始。

该 JSON 配置文件用于管理Bower依赖项。 它以一个依赖项列表开始,然后是每个依赖项的可选详细配置,如下面的截图所示:

Web files and folders

你会注意到这和 Solution Explorer 面板中显示的 Bower 依赖列表是一样的,如下图所示:

Web files and folders

接下来,让我们看一下appsettings.json,它是您的应用配置文件。 ASP.NET Core 中,这个新的 JSON 文件(在测试版中暂时称为config.json)取代了将设置存储在基于 xml 的web.config文件中的需要。 您可以在Startup.cs代码中指定配置文件。

你的设置文件可能看起来像这样:

{ 
  "ConnectionStrings": { 
    "DefaultConnection": "<YourDbConnString>" 
  }, 
  "Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
      "Default": "Debug", 
      "System": "Information", 
      "Microsoft": "Information" 
    } 
  } 
} 

最后但并非最不重要的是,我们有project.json,这是一个 JSON 文件,包含特定于项目的信息和服务器端依赖关系。 更多信息请参见本章的捆绑和发布部分。

模型,视图和控制器-一个 MVC 刷新器

对于那些不熟悉 MVC 的人,这里有一个快速复习,也包括了新的 ASP 信息。 净的核心。 下图显示了一个简单的架构图,它代表了 MVC 软件架构模式:

Models, views, and controllers - an MVC refresher

即使图中显示了每一项中的一个,图中也可以有多个模型、视图和控制器。 每个请求通过一个特定的控制器路由,以确定将在用户的 web 浏览器中显示的结果。

当微软第一次发布 ASP 时,MVC 本身并不是一个新的概念。 净 MVC。 但它立即为。net 开发人员引入了一种开发 web 应用的新方法。 对于早期采用者来说,Web Forms 的好处变得很明显:更清晰的关注点分离,更好的可测试性,以及可以定制的轻量级客户机输出。

一些开发人员由于各种原因没有离开 Web Forms:新的学习曲线、个人偏好、公司需求和许多其他原因。 展望未来,ASP。 由于跨平台。NET Core 不支持 Web 表单,因此 NET MVC 变得更加必要。 此外,ASP.NET Core 不像它的前辈那样依赖于System.Web

所以,如果你还没有看过 MVC,现在是一个很好的时机。

控制器

在某种程度上,控制器是 ASP 的心脏。 净 MVC 应用。 每个控制器根据匹配的路由负责处理用户请求。 控制器可以更新模型中的数据,然后选择一个视图返回给用户。

每个控制器都是基类Controller的子类,它位于Microsoft.AspNetCore.Mvc命名空间中。 这与以前版本的 ASP 的Controller类不同.NET,它位于System.Web.Mvc命名空间中。 事实上,Web API 控制器也使用了新的Controller基类。

在 MVC 中,每个控制器通常从其操作方法中返回一个IActionResult。 对于 web 应用项目,这可以是一个视图。 对于 Web API 项目,这可以是一组数据。 从控制器返回视图和结果是可能的。

型号

与前面一样,您的模型将包含项目的数据域。 每个模型类都可以在代码中表示实体,同时用方括号包围的属性进行修饰。 这种声明式语法还允许您在模型中添加验证规则。

模型的数据会受到控制器的影响。 通过将模型绑定到视图,每个视图将自动决定显示什么以及如何显示它。

为了更清晰的架构,您可以使用特定于视图的模型(或ViewModel)来绑定到视图。 对于通过实体框架反映数据库实体的模型,可以使用带有服务层的存储库模式。 这将让您拥有不必依赖数据库实体结构的 UI 元素。

看到第六章,使用实体框架与数据库进行交互的代码,实体框架的更多信息,一个对象关系映射(ORM). net 应用的框架。

视图

应用中的视图可能是 MVC 中最简单的部分。 每个视图代表 UI 层,产生将显示给最终用户的客户端 HTML、CSS 和 JavaScript。

视图存储在.cshtml文件中,可以在同一个文件中包含服务器端代码和客户端代码。 一个名为ViewBag的内置对象允许你存储自己的属性并在视图中显示它们。 对象及其属性可以通过控制器代码进行操作。

不必在服务器端代码和客户端代码之间来回切换,现在可以在视图中使用标记助手来实现更流畅的语法。 标签助手允许你在 HTML 标签中使用自定义属性,这可能是那些使用AngularJS的开发者所熟悉的。

参见第 3 章理解 MVC,了解更多关于标签助手和视图的信息。

使用 project.json 进行 Web 配置

project.json文件中,您可以找到以下信息:

  • userSecretsId:类似于 guide 的值,用于处理用户秘密
  • 依赖项:服务器端依赖项列表
  • 版本:项目版本
  • 框架:.NET Core 框架名称和版本
  • 构建/运行时/发布选项:构建/运行时配置和发布 web 应用时包含的文件/文件夹列表
  • 脚本:可以由特定事件(如prepublishpostpublish和其他事件)触发的操作的脚本列表

下面的project.json文件截图显示了一个典型的项目配置文件的内容,折叠起来适合所有顶级项目:

Web configuration with project.json

依赖和框架

在配置文件的依赖项部分,您将发现所有服务器端依赖项的列表,例如 ASP.NET MVC,实体框架等等。 它们在解决方案资源管理器中也可以作为项目引用可见。

Dependencies and frameworks

前面的屏幕截图显示了依赖项部分的扩展,以显示引用及其版本号。 下面的截图显示了解决方案资源管理器中相同的一组引用:

Dependencies and frameworks

命令和工具

预发布版本的 ASP.NET Core 包含了可以在project.json配置文件中配置并在 Visual Studio IDE 中触发的命令。 下面的屏幕截图显示了配置文件的命令部分:

Commands and tools

ASP 不再支持commands部分。 1.0 NET Core。 相反,在project.json文件中有一个新的tools部分,它可以用来指定包含项目工具的包。

捆绑发布

最后,我们还将在部署应用时包含用于发布的特定组件。 下面的屏幕截图显示了publishOptions部分,展开显示了要包含的组件:

Bundling and publishing

总结

在本章中,我们已经了解了 ASP 的基本结构.NET Core 1.0 web 应用。 我们深入研究了组成应用的各个部分,包括全新的配置文件。 我们还介绍了 MVC 及其组件的基础知识。

在下一章中,我们将深入探讨 ASP.NET Core MVC。 我们将从头构建一个示例应用,以演示 ASP 中模型、视图和控制器的特性.NET Core MVC web 应用。****