.NetCore WebApi实战2 控制器

控制器职责

1、请求处理

2、模型验证

3、返回响应

 


Controllers--控制器

Contracts--合同--接口

Data

  --Mappings--映射
  --Repositories--仓储库--实现

Entites--实体类
Extensions--拓展

Migrations--迁移

 

创建控制器类

[Route("api/player")]
public class PlayerController:ControllerBase

特性路由  [Route("api/[controller]")]

不代表当前控制器的名称,可读性不强,不如直接硬编码[Route("api/player")],

类名不会改,看起来直观

必须定义[ApiController]

 

 

一、GET请求

返回所有数据

1、先在仓储接口IPlayerRepository中创建 Task<List<Player>> GetAllPlayers();

2、再去仓储库里实现,真正执行查询

        public IQueryable<T> FindAll()
        {
            return GameDbContext.Set<T>().AsNoTracking();
        } 

调用RepositoryBase仓储基类中的FindAll方法,此处只是组装表达式,没有ToList

        public IQueryable<T> FindAll()
        {
            return GameDbContext.Set<T>().AsNoTracking();
        }

3、注入控制器,一个仓储适配器,一个logger

    public class PlayerController(IRepositoryWrapper repository,
        IMapper mapper, ILogger<PlayerController> logger) : ControllerBase

4、创建GET方法 IActionResult GetPlayers,要添加HttpGet特性

  IActionResult就是为了返回数据+状态码,默认json格式

  异步方法

        [HttpGet]
        public async Task<IActionResult> GetPlayers()
        {
            try
            {
                var players = await repository.Player.GetAllPlayers();//Player可以点出粗体方法是自己类的,不加粗的为仓储基类的都可以调用
                return Ok(players);//实现了IActionResult接口,返回200状态码
            }
            catch (Exception ex)
            {
                logger.LogError($"{ex.Message}");
                return StatusCode(500);
            }
        }

webapi是特性路由,方法路由默认继承控制器的路由

HttpGet]特性就会访问Get请求

 

启用Swagger调试工具

启动会打开Swagger,同域调用,same-origin,不是跨域

添加Swashbuckle.AspNetCore.Swagger包,Swashbuckle.AspNetCore.SwaggerUI包

添加服务

Swashbuckle.AspNetCore.SwaggerGen

应用swagger

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

修改Properties/launchSettings.json文件中

profiles节点的launchUrl启动地址weatherforecast为swagger

 

 

 

 

仓储包装器

RepositoryWrapper.cs只会在get的时候才会被实例化,

构造的时候不会实例化,只是用到哪个用哪个,不存在资源浪费,不会一上来全部实例化

按需实例化,同一个上下文

第二次就不会实例化了,用原有的数据了

 

posted on 2025-03-14 16:19  张彦山  阅读(54)  评论(0)    收藏  举报