## 1.4 ABPZero - 启动模板 (ASP.NET Core)
### 1.4.1 简介
使用ABP和module-zero开始一个ASP.Net Core的新项目最简单的方式是使用[启动模板](http://www.aspnetboilerplate.com/Templates)。记住要勾选 **Include module zero**。
在创建并且下载模板项目后:
+ 在VS2015+(推荐使用VS2015 Update3)里面打开你的项目
+ 选择 **Web项目** 作为启动项目。
+ [Migrator.EF](https://github.com/mrahhal/Migrator.EF6)工具被用来添加/应用EF迁移。为了创建你的数据库,打开命令提示符并跳转到EF项目的根目录文件夹。然后运行 **dotnet ef database update** 命令。
+ 运行程序。默认:用户名是 **admin** 密码是 **123qwe**。
在这个模板中,**多租户模式** 默认是开启的。如果你不需要开启,那么你可以在Core项目中禁用它。
### 1.4.2 社交账号登录
启动模板支持 **Facebook,Twitter,Google+和Microsoft** 登录。在 appsettings.json,你可以看到以下配置:
```json
"Facebook": {
"IsEnabled": "false",
"AppId": "",
"AppSecret": ""
},
"Google": {
"IsEnabled": "false",
"ClientId": "",
"ClientSecret": ""
},
"Twitter": {
"IsEnabled": "false",
"ConsumerKey": "",
"ConsumerSecret": ""
},
"Microsoft": {
"IsEnabled": "false",
"ConsumerKey": "",
"ConsumerSecret": ""
}
```
在这里,你可以根据你的需求来决定开启那些配置。当然,你必须从这些相关的网站去获取它的Keys和Passwords。你可以从这些网站找到相关指南来了解怎么获取key。一旦你开启了某个社交网站登录并且输入真实的key,那么你可以在登录界面看到一个按钮。按照相似的方法,你可以实现其它的社交登录方式。
### 1.4.3 基于令牌的身份验证
对于浏览器启动模板使用基于令牌的身份验证。然而,如果你想使用移动应用程序访问Web Api或者应用服务(那些通过[动态Web Api](/Markdown/ABP/5.2ABP分布式服务-动态WebApi层.md)暴露的应用服务),那么你可能想要使用基于令牌的身份验证的机制。启动模板包括了不记名令牌验证基础设施。 在 **.WebApi** 项目中的 **AccountController** 包含了 **Authenticate** 的action,用来获取token。这样我们就可以在下一个请求中使用token。
在这里,我们使用 **Postman** (chrome扩展) 来展示 Requests 和 Reponses。
#### 身份验证
发送一个带有 **Context-Type="application/x-www-form-urlencoded"** 请求头的 **POST** 到 **http://localhost:62114/jwt-token/authenticate**,如下所示:返回的JSON对象的 **result** 属性包含了这个token还有过期时间(默认是24小时并且改选项是可配置的)。我们可以保存并在下个请求中使用它。
![](images/1.3.3.png)
我们发送了表单值:**tenancyName,usernameOrEmailAddress 以及 password**。为了作为一个HOST用户认证,tenancyName不应该被发送。如上所示,
#### 使用API
在取得token和身份认证后,我们可以使用该令牌调用任何需要授权的action。对于所有应用服务的远程调用都是有效的。例如:我们可以使用 **User Service** 来取得用户列表:
![](images/1.3.3.1.png)
模拟一个 **带有Context-Type="application/json" 请求头的POST** 请求到 **http://localhost:6334/api/services/app/tenant/GetTenants** 并且 **Authorization="Bearer your- auth-token"**。请求体是空的 **{}**。当然,请求体和响应体将会使用不同的APIs。
注意:为了表明这是一个AJAX请求,我们还需要添加 **X-Requested-With** 的请求头。因此,ASP.NET Core能够更好的处理请求,并且对成功和错误的情况返回合适的返回值。
在UI端的所有操作是有效的,那么对于Web Api操作也是有效的(因为在UI端使用的是相同的Web Api)并且可以很容易的被使用。
### 1.4.4 使用控制台迁移数据
启动模板包含了一个工具:**Migrator.exe**,使用这个工具可以轻松的迁移你的数据库。你可以运行这个应用来创建/迁移host和tenant的数据库。
![](images/1.2.4.png)
这个应用程序可以从它自己的 **.config** 文件里面取得host的连接字符串。在开始的地方是与web.confg相同的。确认配置文件里面的连接字符串是你想要连接的数据库。然后获取主机连接字符串。首先创建主机数据库,或者应用迁移如果该数据库已经存在。然后,取得租户的连接字符串并且对这些数据库运行迁移。如果没有专门的数据库那么它会跳过该租户,或者对于那些已迁移租户的数据库也会跳过(多个租户之间共享数据库)。
你可以在开发或者生产环境中使用这个工具对数据库迁移部署,而不是使用EF它自己的Migrate.exe(这需要一些必要的配置并且一次运行只能针对单个数据库)。
### 1.4.5 单元测试
启动模板中包含了测试的基础设施设置,并且有少数几个测试已经被集成到了.Test项目中。你可以检测它们,并可以很容易的写一些类似的测试。事实上,它们是集成测试而不是单元测试,因为它们会使用ABP基础设施测试你的代码(包括数据验证,身份权限认证,以及工作单元等等)。
- 文章&教程
- Abp
- 1.1ABP总体介绍-入门介绍
- 1.2ABP总体介绍-多层架构体系
- 1.3ABP总体介绍-模块系统
- 1.4ABP总体介绍-启动配置
- 1.5ABP总体介绍-多租户
- 1.6ABP总体介绍-集成OWIN
- 2.1ABP公共结构-依赖注入
- 2.2ABP公共结构-会话管理
- 2.3ABP公共结构-缓存管理
- 2.4ABP公共结构-日志管理
- 2.5ABP公共结构-设置管理
- 2.6ABP公共结构-时区设置
- 3.1ABP领域层-实体
- 3.2ABP领域层-值对象
- 3.3ABP领域层-仓储
- 3.4ABP领域层-领域服务
- 3.5ABP领域层-工作单元
- 3.6ABP领域层-领域事件
- 3.7ABP领域层-数据过滤器
- 4.1ABP应用层-应用服务
- 4.2ABP应用层-数据传输对象
- 4.3ABP应用层-数据传输对象验证
- 4.4ABP应用层-权限认证
- 4.5ABP应用层-功能管理
- 4.6ABP应用层-审计日志
- 5.1ABP分布式服务-ASP.NET WebApi
- 5.2ABP分布式服务-动态WebApi层
- 5.3ABP分布式服务-集成OData
- 5.4ABP分布式服务-集成SwaggerUI
- 6.1ABP表现层-Mvc控制器
- 6.2ABP表现层-Mvc视图
- 6.3ABP表现层-本地化
- 6.4ABP表现层-导航栏
- 6.5ABP表现层-异常处理
- 6.6.2-AJAX
- 6.6.3-Notification
- 6.6.4-Message
- 6.6.5-UIBlockBusy
- 6.6.6-EventBus
- 6.6.7-Logging
- 6.6.8-OtherUtilities
- 6.6ABP表现层-JavascriptAPI
- 6.7ABP表现层-嵌入资源文件
- 6.8ASP.NET-Core
- 6.9CSRF和XSRF保护
- 7.1ABP后台服务-后台作业和工人
- 7.2ABP后台服务-集成Hangfire
- 8.1ABP实时服务-通知系统
- 8.2ABP实时服务-集成SignalR
- 9.1ABP基础设施层-集成Entity Framework
- 9.2ABP基础设施层-集成NHibernate
- 9.3ABP基础设施层-集成Entity Framework Core
- abp合并版160929
- md文档排版规范
- AbpZero
- 1.1ABPZero-概述
- 1.2ABPZero-安装
- 1.3ABPZero-启动模板
- 1.4ABPZero-启动模板Core
- 2.1ABPZero-多租户管理
- 2.2ABPZero-版本管理
- 2.4ABPZero-组织单位管理