SDK 安装
- 判断是否安装成功?
Win + R => cmd => dotnet
Options:
-h | –help
…看到这样的结果,证明成功了。
新建项目
文件 => 项目 选择.Net Core 版本和项目类型 ASP.NET Core 2.0,选择 API 的项目类型
目录说明
Dependencies (依赖项)
Properties (设置文件)
Controllers (Code)
Program.cs (入口地址) 重要
StartUp.cs (项目启动设置) 重要
调试方法
1、通过IIS调试1
2
3
4
5
6
7
8
9//launthSettings.json
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},2、Kestrel web应用调式
1
2
3
4
5
6
7
8
9
10//launthSettings.json
"项目名称": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:58224/"
}核心
1、Routing 路由
Convention-based (按约定), attribute-based(基于路由属性配置)
Web api 推荐使用 attribute-based
常用的Http Method有:
Get, 查询, Attribute: HttpGet
POST, 创建, HttpPost
PUT 整体修改更新 HttpPut
PATCH 部分更新, HttpPatch
DELETE 删除, HttpDelete
2、内容协商 Content Negotiation
例如: application/json, application/xml 等
.Net Core 默认提供的是 json 格式1
2
3
4
5
6
7//如果想输出 xml 格式,就在 Startup.cs 配置这里:
services.AddMvc(
options => {
options.ReturnHttpNotAcceptable = true;
options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter())
}
);3、创建Post Action
4、Validation 验证
5、PUT请求
Swagger
- 引用 Nuget 包
右键项目中的 Dependencies (依赖项) – > Manage Nuget Packags (管理Nuget程序包) –> Browse (浏览) –> Search (搜索) “Swashbuckle.AspNetCore” –> Install (安装)
配置服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30//class Startup
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(); // 注册MVC到Container
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Swashbuckle.AspNetCore.Swagger.Info
{
Version = "v0.1.0",
Title = "MResManager API",
Description = "框架说明文档",
TermsOfService = "None",
Contact = new Swashbuckle.AspNetCore.Swagger.Contact { Name = "MResManager", Email = "", Url = "" }
});
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, "MResManager.xml"); //这个就是MResManager的xml文件名
c.IncludeXmlComments(xmlPath, true); //默认的第二个参数是false,这个是controller的注释,记得修改
var xmlModelPath = Path.Combine(basePath, "MResManager.Model.xml"); //这个就是Model层的xml文件名
c.IncludeXmlComments(xmlModelPath);
});
}启动Http中间件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23//class Startup
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//判断是否是环境变量
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "ApiHelp V1");
c.RoutePrefix = "";//路径配置,设置为空,表示直接访问该文件,
//路径配置,设置为空,表示直接在根域名(localhost:8001)访问该文件,注意localhost:8001/swagger是访问不到的
});
app.UseMvc();
}运行项目 域名后面输入/swagger,即可看到接口文档。
注意点:
设置默认直接首页访问
1
2
3
4
5
6//启动Http中间件中这一段代码
c.RoutePrefix = "";//路径配置,设置为空,表示直接访问该文件,
//路径配置,设置为空,表示直接在根域名(localhost:8001)访问该文件,注意localhost:8001/swagger是访问不到的
}launchSettings.json 的 launchUrl:“”,这样我们无论是本地开发环境,还是生产环境,都可以默认首页加载了。
为接口, Model 添加注释说明
右键项目名称 => 属性 => 生成,勾选“输出”下面的“xml文档文件”, 路径可以相对路径(../xxx/xxx.xml)。
生成序列化程序集 => 自动 (指定的任务可执行文件“sgen.exe”未能运行。文件名或扩展名太长。)
Errors and warnings 错误和警告 => 禁止显示警告:1701;1702;1591 (去掉Swagger警告提示)
Xml 文件配置好了之后, 系统启动的时候,读取文件:
1
2
3
4
5
6
7
8
9
10
11//配置服务这一段代码
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, "MResManager.xml"); //这个就是MResManager的xml文件名
c.IncludeXmlComments(xmlPath, true); //默认的第二个参数是false,这个是controller的注释,记得修改
var xmlModelPath = Path.Combine(basePath, "MResManager.Model.xml"); //这个就是Model层的xml文件名
c.IncludeXmlComments(xmlModelPath);
}
JWT
- 官方解释: JWT(读作 [/dʒɒt/]),即JSON Web Tokens,是一种基于JSON的、用于在网络上声明某种主张的令牌(token),由三部分组成: 头信息(header), 消息体(payload)和签名(signature)。它是一种用于双方之间传递安全信息的表述性声明规范。JWT作为一个开放的标准(RFC 7519),定义了一种简洁的、自包含的方法,从而使通信双方实现以JSON对象的形式安全的传递信息。
JWT并不是一种只能权限验证的工具,而是一种标准化的数据传输规范。所以,只要是在系统之间需要传输简短但却需要一定安全等级的数据时,都可以使用JWT规范来传输。规范不受平台限制,所以JWT做为授权验证可以跨平台。
生成 Token 令牌
1 | public class JwtHelper |
1 |
|
JWT 授权认证
Swagger 已经帮我们实现了录入 Token 令牌的功能:
ConfigureServices -> AddSwaggerGen 服务中, 增加如下代码
1 |
|
运行项目,swagger/index.html 页面里看到这个Token入口: Authorize, 点击按钮,输入框输入 Bearer xxxxxxxxxxxxx
注意 Bearer 后面是一个空格,如果使用中间件 app.UseMiddleware
1、API 接口授权策略
直接接口上,设置该接口对应的角色权限
1 | [HttpPost] |
ConfigureService 中设置:
1 | services.AddAuthorization(options => |
2、自定义认证之身份验证
1 | public class JwtTokenAuth |
3、开启中间件
startup.cs -> Configure 中配置认证中间件
1 | //自定义认证中间件 |