ASP.NET Core 3.1中整体项目搭建(仓储+服务+抽象接口)

本文介绍了使用ASP.NET Core创建WebAPI的基础步骤,包括创建接口文档、实现JWT权限认证。详细讲解了项目结构,如Api、实体、仓储和服务模块的职责,以及如何实现数据操作和业务逻辑。并提供了仓储接口和实现、服务接口和实现的代码示例,最后展示了如何创建和测试Controller接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、知识储备 

ASP.NET Core创建Web API 基础内容说明https://coffeemilk.blog.csdn.net/article/details/120487169ASP.NET Core创建Web API---接口说明文档(Swagger)https://coffeemilk.blog.csdn.net/article/details/120563736ASP.NET Core 3.1中使用JWT权限认证https://coffeemilk.blog.csdn.net/article/details/120727590

二、内容概要

2.1、基础核心

 2.2、各层级的简介和调用关系

1、Api模块【对应WebApi中Controller下的所有内容】;实体模块【数据、表实体】可提供对外暴露。

2、仓储模块【可以看做是一个数据库管理人员,直接对数据库、实体层进行操作】(一般包含:BaseRepository[基类仓储]继承实现接口 IBaseRepository[该接口存放公共方法] ,AdvertisementRepostitory 继承 BaseRepository<Advertisement>, IAdvertisementRepository)。

注意:

        ①仓储的官方定义是【仓储是一个管理者,去管理实体对象和ORM[对象关系映射(Object Relational Mapping)]映射对象的一个集合】(是ORM操作db[数据库(database)])而Dal就是完完全全的操作数据库了;

        ②仓储是一种模式,可以单建一层,也可以放到基础设施层(而Dal[数据访问层(Data Access Layer)]是三层架构中的某一层,是一种架构);

        ③仓储表示的更多是一个集合【即:一个仓储 = 一个聚合 = 有一个聚合根 = 一个微服务】;多个微服务之间的交互就是通过聚合根来实现的。

3、服务模块【处理业务逻辑,可直接使用ViewModel视图模型】(BaseService 调用BaseRepository,同时继承 IBaseService ;AdvertisementServices  继承   BaseServices<Advertisement>, IAdvertisementServices)。

三、基础项目搭建

ASP.NET Core 3.1中整体项目搭建(仓储+服务+抽象接口)项目工程源码icon-default.png?t=LA92https://download.csdn.net/download/xiaochenXIHUA/57820340

3.1、创建Model实体

 

①【Models文件夹中,存放的是整个项目中数据库表实体类】,本章内容目前是手动创建,后面会使用SqlSugar的T4创建。

②【ViewModels文件夹中,存放的是DTO(就是数据传输对象(Data Transfer Object))实体类】在开发中,一般接口需要接收数据,返回数据,不能直接使用数据库实体类接收(因为弊端很大,比如会把重要信息泄露出,本章内容目前是手动创建,后面会引用AutoMapper来自动转换。

③最后是MessageModel和TableModel,主要是用在前端接口中,因为在前端接口中,需要固定的格式,以及操作,不能把数据直接发出去,会报错。

    /// <summary>
    /// 通用返回信息类
    /// </summary>
    public class MessageModel<T>
    {
        /// <summary>
        /// 操作是否成功
        /// </summary>
        public bool Success { get; set; }

        /// <summary>
        /// 返回信息
        /// </summary>
        public string Msg { get; set; }

        /// <summary>
        /// 返回数据集合
        /// </summary>
        public List<T> Data { get; set; }

    }

3.2、设计仓储接口及其实现类

创建【IRepository】和【Repository】仓储层。 

    仓储层(Repository) 是管理数据库持久层的,主要负责数据的CRUD(Create、Read、Update、Delete)业务逻辑;仓储层是一个独立的层,介于领域层与数据映射层(数据访问层)之间。它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层进行领域对象的访问。Repository 是仓库管理员,领域层需要什么东西只需告诉仓库管理员,由仓库管理员把东西拿给它,并不需要知道东西实际放在哪。

 ①创建【IAdvertisementRepository】仓储接口,想要实现求和。

/***
*	Title:"WebApi" 项目
*		主题:广告仓储接口
*	Description:
*		功能:实现求和
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

namespace IRepository
{
    public interface IAdvertisementRepository
    {
        int Sum(int i, int j); 


    }//Interface_end
}

②创建【AdvertisementRepository】仓储实现类,实现求和功能

/***
*	Title:"WebApi" 项目
*		主题:广告仓储实现
*	Description:
*		功能:实现求和
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using IRepository;

namespace Repository
{
    public class AdvertisementRepository : IAdvertisementRepository
    {
        public int Sum(int i, int j)
        {
            return i + j;
        }


    }//Class_end
}

3.3、设计服务接口及其实现类

创建【IServices】和【Services】服务层(处理业务逻辑)。

    服务层只负责将Respository仓储层的数据进行调用,至于如何是域数据库交互的,它不去管,这样就可以达到一定程度上的解耦,加入以后要更换数据库(如:MySql)那Service层就完全不需要修改即可,至于真正意义上的解耦,需要靠依赖注入

 ①创建【IAdvertisementServices】服务接口,想要实现求和

/***
*	Title:"WebApi" 项目
*		主题:广告服务接口
*	Description:
*		功能:实现求和
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

namespace IServices
{
    public interface IAdvertisementServices
    {
        int Sum(int i, int j);

    }//Interface_end

}

②创建【AdvertisementServices】服务实现类,实现具体求和功能

/***
*	Title:"WebApi" 项目
*		主题:广告服务实现
*	Description:
*		功能:实现求和功能
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using IRepository;
using IServices;
using Repository;

namespace Services
{
    public class AdvertisementServices : IAdvertisementServices
    {
        IAdvertisementRepository dal = new AdvertisementRepository();

        public int Sum(int i, int j)
        {
            return dal.Sum(i, j);
        }


    }//Class_end
}

3.4、创建Controller接口

    手动添加一个Controller控制器,可以选择一个空的,也可以选择一个带有默认读写实例的。如下:

/***
*	Title:"WebApi" 项目
*		主题:广告控制器
*	Description:
*		功能:求和功能Api
*	Date:2021
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using IServices;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Test_NETCoreWebAPI.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    [Authorize(Policy = "AdminOrUser")]
    public class AdvertisementController : ControllerBase
    {
        // GET: api/<AdvertisementController>
        //Sum接口
        [HttpGet]
        public IEnumerable<string> Get(int i,int j)
        {
            return new string[] { "value1", "value2" };
        }

        /// <summary>
        /// 广告的Sum方法
        /// </summary>
        /// <param name="i">参数i</param>
        /// <param name="j">参数j</param>
        /// <returns></returns>
        [HttpGet("{i},{j}")]
        public int GetSum(int i,int j)
        {
            IAdvertisementServices advertisementServices = new AdvertisementServices();
            return advertisementServices.Sum(i,j);
        }

        // POST api/<AdvertisementController>
        [HttpPost]
        public void Post([FromBody] string value)
        {
        }

        // PUT api/<AdvertisementController>/5
        [HttpPut("{id}")]
        public void Put(int id, [FromBody] string value)
        {
        }

        // DELETE api/<AdvertisementController>/5
        [HttpDelete("{id}")]
        public void Delete(int id)
        {
        }
    }
}

四、运行测试

4.1、使用实时监测项目修改的方式运行项目

①打开Controller文件夹所在的Web Api文件夹目录,比如我这里的WebApi项目路径是【E:\AllProjects\AllTestProjects\C#\Test_NETCoreWebAPI\Test_NETCoreWebAPI】,则在该地址中直接输入命令【CMD】打开终端。

 

②在终端中输入实时监测启动程序命令【dotnet watch run】后按下Enter即可启动

4.2、测试接口

 这里提示没有权限,我们可以手动获取Token输入,然后再运行测试,如下所示:

首先获取Token

然后注入Token

最后运行测试求和的Web Api接口 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛奶咖啡13

我们一起来让这个世界有趣一点…

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值