2023年5月

后端

启用服务

  1. 安装Nuget包Cors;
  2. 注册服务:

    builder.Services.AddCors(options =>
    {
        options.AddPolicy
        (
            name:"Cors",
            builder =>
            {
                builder.WithOrigins("*", "*", "*")
                .AllowAnyOrigin()
                .AllowAnyHeader()
                .AllowAnyMethod();
            }
    
         );
    });
  3. 启用服务:

    app.UseCors("Cors");    
    builder.Services.AddCors(c=>c.AddPolicy("any",p=>p.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin()));
    app.UseCors();

controller 注解

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

Controller上添加特性 [Route("路径")],自动对应其请求到该controller。
其中路径文本可有以下Attribute:

[controller]

自动映射到Controller类名前缀;

[action]

自动映射到method名;

method

方法的参数以请求query的方式传输。

[http请求方法(string? template)]

指定该方法对应请求方式 (如HttpGet,HttpPost),若有string参数,等同于[Route]

[Route(string? template)]

template可以是固定值,也可以使用 {name} 占位符映射参数实现伪静态,{name}必须有实现映射(同名参数或参数使用[RouteFrom("name")]映射).

所有公开Action必须有路由,否则编译报错。(由ApiController实现)

ApiCOntroller实现:

  • 属性路由要求
  • 自动Http400响应
  • 绑定源参数推理
  • Multipart/form-data请求推理(验证数据类型)
  • 错误状态代码的问题详细信息

Controller下:

若方法为

public IActionResult method(){
  return View();
}

则会生成并返回 对应的View视图;

MVC 与 WebApi的区别:
mvc:
controller是实现Controller(继承自ContollerBase);
有添加ControllerWithViews 服务;
有Route;
能够使用Razor引擎(Cshtml)
WebApi:
Controller 继承 ControllerBase;
只能使用普通web调用接口(ajax,axios,fetch);
有swagger;