.NetCore,WebApi简易开发框架搭建

摘要:
1.首先,创建一个新的。NetCoreWeb开发项目,如图所示选择WebApi,创建几个文件夹,此框架使用的ORM是Sqlsugar。直接管理依赖项--˃中的nuget包,搜索Sqlsugar,选择Sqlsugar Core,安装并安装ORM,然后开始连接数据库。首先,编写DbContext类publicclassDbContext{publicSqlSugarClientDb;publicDbContext

1.首先,新建一个.NetCoreWeb开发项目,选择WebApi

.NetCore,WebApi简易开发框架搭建第1张

如图所示,新建几个文件夹

本框架使用的ORM为Sqlsugar,直接在依赖项--->管理nuget程序包,搜索Sqlsugar,选择SqlsugarCore,安装

安装好ORM后,我们开始连接数据库

首先写DbContext类

 public class DbContext
    {
        public SqlSugarClient Db;
        public DbContext()
        {
            Db = new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString = ConfigurationManager.Configuration["ConnectionStrings:SqlServerConnection"],
                DbType = DbType.SqlServer,//设置数据库类型
                IsAutoCloseConnection = true,//自动释放数据务,如果存在事务,在事务结束后释放
                InitKeyType = InitKeyType.Attribute //从实体特性中读取主键自增列信息
            });           
        }

        public DbSet<DbModel> GetDb<DbModel>() where DbModel : class, new()
        {
            return new DbSet<DbModel>(Db);
        }
        /// <summary>
        /// 扩展ORM
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class DbSet<T> : SimpleClient<T> where T : class, new()
        {

            public DbSet(SqlSugarClient context) : base(context)
            {

            }
        }
    }

这里ConfigurationManager,是用来处理读取配置文件的,即appsettings.json

public class ConfigurationManager
    {
        public readonly static IConfiguration Configuration;
        static ConfigurationManager()
        {
            Configuration = new ConfigurationBuilder()
             .Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
             .Build();
        }
    }

在配置文件里设置数据库连接字符串

.NetCore,WebApi简易开发框架搭建第2张

接下来我们开始写基础仓储处理

在interface文件夹新建接口IBaseServer接口

public interface IBaseServer<T> where T : class
    {
        /// <summary>
        /// 查询数据不需要任何条件
        /// </summary>
        /// <returns></returns>
        Task<ApiResult<List<T>>> GetListAsync();

        /// <summary>
        /// 添加一条数据
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        Task<ApiResult<string>> AddAsync(T parm);


        /// <summary>
        /// 删除一条或者多条数据
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        Task<ApiResult<string>> DeleteAsync(string parm);

        /// <summary>
        /// 修改一条数据
        /// </summary>
        /// <param name="pram"></param>
        /// <returns></returns>
        Task<ApiResult<string>> UpdateAsync(T pram);

        /// <summary>
        /// 获得一条数据
        /// </summary>
        /// <param name="where">Expression<Func<T, bool>></param>
        /// <returns></returns>
        Task<ApiResult<T>> GetModelAsync(Expression<Func<T, bool>> where);

        /// <summary>
        /// 添加多条数据
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        Task<ApiResult<List<T>>> AddList(List<T> parm);
    }
IBaseServer<T> where T : class ,接口限制传入的必须为类

在BaseServer文件夹新建BaseServer类,这个是对接口的实现
/// <summary>
    /// 学习笔记:
    /// 接口实现要继承数据库上下文类和接口
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class BaseServer<T> : DbContext, IBaseServer<T> where T : class, new()
    {
        /// <summary>
        /// 简单查询
        /// </summary>
        /// <returns></returns>
        public Task<ApiResult<List<T>>> GetListAsync()
        {
            var res = new ApiResult<List<T>>();//定义res对象
            try
            {
                var query = Db.Queryable<T>().ToList();
                res.success = true;
                res.message = "获得成功";
                res.statusCode = (int)ApiEnum.Error;
                res.data = query;
            }
            catch (Exception ex)
            {
                res.message = ApiEnum.Error.GetEnumText() + ex.Message;
                res.statusCode = (int)ApiEnum.Error;
            }
            return Task.Run(() => res);
        }

        /// <summary>
        /// 插入一条数据
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        public async Task<ApiResult<string>> AddAsync(T parm)
        {
            //将报错状态重新赋值
            var res = new ApiResult<string>() { statusCode = (int)ApiEnum.Error };
            try
            {
                var dbres = GetDb<T>().Insert(parm);
                if (!dbres)
                {
                    res.message = "添加失败~";
                }
                else
                {
                    res.message = "添加成功~";
                    res.success = true;
                    res.statusCode = (int)ApiEnum.Status;
                }
            }
            catch (Exception ex)
            {
                res.message = ApiEnum.Error.GetEnumText() + ex.Message;
            }
            return await Task.Run(() => res);
        }

        /// <summary>
        /// 删除一条或者多条数据
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        public async Task<ApiResult<string>> DeleteAsync(string parm)
        {
            var res = new ApiResult<string>() { statusCode = (int)ApiEnum.Error };
            try
            {
                var list = Utils.StrToListString(parm);
                var dbres = GetDb<T>().DeleteByIds(list.ToArray());
                if (!dbres)
                {
                    res.message = "删除数据失败~";
                }
                else
                {
                    res.success = true;
                    res.message = "删除数据成功~";
                    res.statusCode = (int)ApiEnum.Status;
                }
            }
            catch (Exception ex)
            {
                res.message = ApiEnum.Error.GetEnumText() + ex.Message;
            }
            return await Task.Run(() => res);
        }

        /// <summary>
        /// 更新一条数据
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        public async Task<ApiResult<string>> UpdateAsync(T parm)
        {
            var res = new ApiResult<string>() { statusCode = (int)ApiEnum.Error };
            try
            {
                var dbres = GetDb<T>().Update(parm);
                if (!dbres)
                {
                    res.message = "修改数据失败~";
                }
                else
                {
                    res.success = true;
                    res.message = "修改数据成功~";
                    res.statusCode = (int)ApiEnum.Status;
                }
            }
            catch (Exception ex)
            {
                res.statusCode = (int)ApiEnum.Status;
                res.message = ApiEnum.Error.GetEnumText() + ex.Message;
            }
            return await Task.Run(() => res);
        }


        /// <summary>
        /// 获得一条数据
        /// </summary>
        /// <param name="where">Expression<Func<T, bool>></param>
        /// <returns></returns>
        public async Task<ApiResult<T>> GetModelAsync(Expression<Func<T, bool>> where)
        {
            var model = GetDb<T>().GetSingle(where);
            var res = new ApiResult<T>
            {
                statusCode = 200,
                data = model ?? new T() { }
            };
            return await Task.Run(() => res);
        }

        /// <summary>
        /// 插入多条数据
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        public async Task<ApiResult<List<T>>> AddList(List<T> parm)
        {
            //将报错状态重新赋值
            var res = new ApiResult<List<T>>() { statusCode = (int)ApiEnum.Error };
            try
            {

                var dbres = Db.Insertable(parm).ExecuteCommand();
                if (dbres == 0)
                {
                    res.message = "添加失败~";
                }
                else
                {
                    res.message = "添加成功~,添加了" + dbres + "";
                    res.success = true;
                    res.statusCode = (int)ApiEnum.Status;
                }
            }
            catch (Exception ex)
            {
                res.message = ApiEnum.Error.GetEnumText() + ex.Message;
            }
            return await Task.Run(() => res);
        }
    }

接口和实现类写好以后我们需要再startup文件进行接口的注册

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            //接口注册
            services.AddTransient<ITUserAuthsService, TUserAuthsService>();
           
        }

接口注册完成之后,我们需要新建控制器了,通过沟槽函数的形式实现接口的注入,注入后,写个方法跑一下

 public class LoginController : ControllerBase
    {
        private readonly ITUserAuthsService _tUserAuthsService;

        public LoginController(ITUserAuthsService tUserAuthsService)
        {
            _tUserAuthsService = tUserAuthsService;
        }

        /// <summary>
        /// 用户登陆
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        [HttpPost("Login")]
        public async Task<ApiResult<Result>> LoginAsync([FromBody]TUserAuthsLogin parm)
        {

            return await _tUserAuthsService.LoginAsync(parm);
        }
    }

免责声明:文章转载自《.NetCore,WebApi简易开发框架搭建》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WildCard的使用asp.net关键字模糊查询(类似于各大网站搜索功能)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

apiDoc的使用

一、安装   1.安装node.js,下载链接:https://nodejs.org/zh-cn/   2.安装apiDoc,命令行:npm install apidoc -g 二、配置       在项目中配置apidoc.json文件(我的配置在接口文件夹下),该文件描述了项目对外提供接口的概要信息如名称、版本、描述、文档打开时浏览器显示标题和接口缺省...

记一次Hvv中遇到的API接口泄露而引起的一系列漏洞

引言 最近朋友跟我一起把之前废弃的公众号做起来了,更名为鹿鸣安全团队,后面陆续会更新个人笔记,有趣的渗透经历,内网渗透相关话题等,欢迎大家关注 前言 Hvv中的一个很有趣的漏洞挖掘过程,从一个简单的API泄露到一系列漏洞。这次的经历更让我体会到了细心的重要性。 挖掘起始 Hvv中拿到了一大堆的资产,有IP和URL的,我一般会先去手动挖掘已经给了的URL资产...

使用反射机制调用属性和私有成员与代理模式的介绍

使用反射机制调用属性: 通过反射机制可以获得类的属性,获得到的属性同样的可以进行赋值、得值操作,调用getField方法并传递属性的名称可以获得【学Java,到凯哥学堂kaige123.com】指定的属性,调用getFields方法则可以获得全部属性,但是这种方式不能获得私有属性: 代码示例: Student类示例: 运行结果: 从运行结果可以看出只...

顺丰丰桥软件开发工具包 (.NET)

丰桥 - 一站式对接服务平台, 打通客户与顺丰系统之间的信息流, 实现物流供应链一体化. 随着一个电商项目和顺丰合作, 信息流对接就是我们开发的事了. 顺丰通过丰桥提供了一些开放接口, 不过丰桥提供的 SDK 非常简陋, 对 .NET 的支持就更差了. 于是就有了这个项目 sf-express-sdk-net 主要接口集成: 接口 接口方式 描述...

JAR包升级,我们关注啥

我们在测试过程中,经常面临JAR包升级的情况,那么在JAR包升级过程中,我们应该关注哪些东西呢? 什么是JAR包?? Java Archive,Java 归档文件。jar的文件格式与平台无关,它允许将许多文件组合成一个压缩文件。JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。 a.用于发...

写一个播放视频文件的ActiveX控件——MFC版(原创)

    介于自己的ATL学的不怎么样,而且现在掌握的也不是很熟练,所以还是先用MFC来写一个播放视频的ActiveX控件吧。用MFC做ActiveX控件非常简单,和用MFC做普通的Windows应用程序差不多是一样的步骤。所以,如果用过MFC的话,开发起来会非常的顺手。不过了,MFC是已经快过时了,不过在中国暂时还没有过时。还有一个问题,MFC做的界面非...