Controller
.Net Core 3.1之前,需要手动在方法参数前添加参数才能实现RequestPayload反序列化。
| 特性 | 绑定源 |
|---|---|
| FromBody | 请求正文 |
| FromForm | 表单数据 |
| FromHeader | 请求标头 |
| FromQuery | 请求查询字符串参数 |
| FromRoute | 当前请求路由数据 |
| FromServices | 作为操作参数插入的请求服务 |
后被[ApiController]特性完成。
.Net Core 3.1之前,需要手动在方法参数前添加参数才能实现RequestPayload反序列化。
| 特性 | 绑定源 |
|---|---|
| FromBody | 请求正文 |
| FromForm | 表单数据 |
| FromHeader | 请求标头 |
| FromQuery | 请求查询字符串参数 |
| FromRoute | 当前请求路由数据 |
| FromServices | 作为操作参数插入的请求服务 |
后被[ApiController]特性完成。
若使用method(Type Parameter1, Type p2 );
则会获取 Request 中 Query String Parameter数据(Form表单),若需要获取Data内容应该创建model 并 method(modelClass model),则会json 反序列化Request Payload 成对象(这个转换在[Apicontroller]特性中完成)。
注册服务:
builder.Services.AddCors(options =>
{
options.AddPolicy
(
name:"Cors",
builder =>
{
builder.WithOrigins("*", "*", "*")
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
}
);
});启用服务:
app.UseCors("Cors");
builder.Services.AddCors(c=>c.AddPolicy("any",p=>p.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin()));
app.UseCors();controller添加特性[EnableCors("any")]
举例:
| API | 描述 |
|---|---|
| GET /api/items | 获取所有item |
| GET /api/item/{id} | 获取制定项 |
| POST /api/items | 添加新项 |
| PUT /api/items/{id} | 更新现有项 |
| DELETE /api/items/{id} | 删除现有项 |
| 不常用: | |
| PATCH /api/items/{id} | 更新现有项部分内容 |
每个方法都有对应的路由,若两个方法路由重复则运行报错。
基本类型参数默认映射源为 表单,其它为RequestBody.
Controller上添加特性 [Route("路径")],自动对应其请求到该controller。
其中路径文本可有以下Attribute:
自动映射到Controller类名前缀;
自动映射到method名;
方法的参数以请求query的方式传输。
指定该方法对应请求方式 (如HttpGet,HttpPost),若有string参数,等同于[Route]
template可以是固定值,也可以使用 {name} 占位符映射参数实现伪静态,{name}必须有实现映射(同名参数或参数使用[RouteFrom("name")]映射).
所有公开Action必须有路由,否则编译报错。(由ApiController实现)
ApiCOntroller实现: