【c#】前后端分离练习小项目学习笔记----纯干货

news2025/7/9 9:21:35

结果图

在这里插入图片描述
在这里插入图片描述

涉及到的技术

1、HttpClient请求网络
2、webapi接口用法
3、sqlsugar数据库使用
4、Json序列化、反序列化

设计流程

刚开始做这个小项目,很懵。按照平常中项目的写法,就是先配置好数据库,服务层,控制层,再到前端调用,但是实际操作还是很多问题,下面是做完这个小项目学习总结的一个流程

一、后端(主要是操作数据库来为前端提供前端请求的数据)
1、在类库中创建公共DTO类(MODEL),SERVER层中也需要创建Model,但是为什么建设两个,因为,在SERVER层中的Model前端访问不了,其次,SERVER层需要操作数据库,会给Model层加一些特性标记,仅限于SERVER层去使用,如果只单独建一个公共类库中DTO(MODEL),那么,公共类库中需要引用SQLSUGAR包,不合规范
2、配置数据库DbContext
3、service层编写业务代码,注入数据库依赖DB
4、控制层添加接口特性、注入Iservice依赖service
5、startup文件中服务注入,凡是构造器中注入的服务都需要注入到startup文件中。注入服务的方式有三种:
builder.Services.AddSingleton();
builder.Services.AddScoped();
builder.Services.AddTransient();
6、调试接口
二、前端
1、配置httpclient服务,目的是获取网络(指定接口地址)的数据,注意凡是涉及到传输数据格式不为application/text格式,都需要在请求的头文件中修改请求头类型,content-type
2、设计前端页面,调用httpclient服务去虎丘数据
三、注意
1、Oracle数据库连接字符串
2、实体类字段类型要和数据库表字段类型保持一致
3、前端Httpclient请求的地址和调用接口返回的地址一致
4、前端解析返回的结果类型必须和后端返回的类型一致
5、每次List在循环中给T对象赋值时,需要将new T放在循环中,原理和创建行一致
6、当使用sqlsugar去修改数据时,主键数据不能被修改,只能修改非主键数据。
7、sqlsugar主键自增属性OracleSequenceName=“sequence表”,sequence表必须是默认创建的额,否则会冲突

代码展示

前端请求接口代码

public class WebClient
    {
        public HttpClient client;
        public string baseurl;
        public string token;


        public WebClient()
        { 
            client=new HttpClient();
            client.Timeout =new TimeSpan(0,0,5,0);
            baseurl = "https://localhost:7212/EMPInfo";
            client.BaseAddress= new Uri(baseurl);
        }

        /// <summary>
        /// 验证登录
        /// </summary>
        /// <param name="Userid"></param>
        /// <param name="Pwd"></param>
        /// <returns></returns>
        public void LoginVerify(string Userid,string Pwd)
        {

        }



        /// <summary>
        /// get请求
        /// </summary>

        public string GetInfo()
        {
            using (client = new HttpClient())
            { 
                HttpResponseMessage httpResponseMessage=new HttpResponseMessage();

                //获取请求结果
                httpResponseMessage = client.GetAsync(baseurl+ "/GetEmpInfo").Result;
                if (httpResponseMessage != null)
                {
                    //将请求的结果给到
                    return httpResponseMessage.Content.ReadAsStringAsync().Result;
                }
                return null;
            }
        }

        /// <summary>
        /// post保存
        /// </summary>
        public string  SaveData(List<K_emp> config)
        {
            using (client=new HttpClient())
            {
              
                HttpResponseMessage responseMessage = new HttpResponseMessage();
                var json = JsonConvert.SerializeObject(config);
                //发送或解析JSON数据需要加头文件类型描述
                HttpContent content = new StringContent(json,Encoding.UTF8);
                content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                responseMessage = client.PostAsync(baseurl+ "/UpdateEmpInfo", content).Result;
                return responseMessage.Content.ReadAsStringAsync().Result;
            }
        }
    }

后端配置DBCONTEXT

public DbContext()
        {
            Db = new SqlSugarClient(new ConnectionConfig
            {
                ConnectionString = "Data Source=(DESCRIPTION=" + "(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.1.7)(PORT=1521))" + "(CONNECT_DATA= (SERVER = DEDICATED)(SERVICE_NAME=ORCL)));" + "User Id=scott;Password=tiger;",
                DbType = DbType.Oracle,
                InitKeyType = InitKeyType.Attribute,//从特性读取主键和自增列信息
                IsAutoCloseConnection = true//开启自动释放模式和EF原理一样

            });
            //sqlsugar创建实体类
            //client.CodeFirst.InitTables(typeof(K_emp));
            //client.Aop.OnLogExecuting(SQL,Parameter)=>{ 

            //};

        }

其余的就是业务代码,没啥区别

总结

本次还用到了一个新鲜的写法

if (dataGridView1.DataSource is List<K_emp> config)
            {
            	//这样就可以直接拿到K_EMP对象属性,直接操作
                config.Capacity = "";
            }
            最后返回K_emp对象Config。

本次还是收获蛮大,很开心。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模式识别与机器学习(更新中)

模式识别与机器学习 使用的教材&#xff0c;PPT为1 公式推导部分直接去看白板推导2&#xff0c;不管是书上还是ppt都写的极其模糊 先说重点&#xff1a; 贝叶斯算概率参数估计 第二讲 贝叶斯学习基础 贝叶斯公式 先验概率是非条件概率 似然概率是给定变量的条件下观测变…

贤鱼的刷题日常--P1665 正方形计数--题目详解

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;学习了解–P1665 正方形计数 ✅创作者&#xff1a;贤鱼 ⏰预计时间&#xff1a;5分钟 &#x1f389;个人主页&#xff1a;贤鱼的个人主页 &#x1f525;专栏系列&#xff1a;c &#x1f341;贤鱼的个人社区&#xff0c;欢迎…

基于matlab的瑞利衰落信道建模和仿真

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB预览 4.完整MATLAB程序 1.算法概述 无线信道的小尺度衰弱特征可以分为三大类&#xff1a; 一类是由于多径传播导致短时间内幅度衰落&#xff1b; 一类是由于多径的时延扩展引起时间色散导致的信道衰弱&#xff1b; 一类是由于…

点成分享 | 微流控技术集成系统的应用

一、背景 微流控技术是指把化学和生物等领域中涉及的样品制备、反应、分离、检测、细胞培养、分选、裂解等基本操作单元集成到一块几平方厘米甚至更小的芯片上&#xff0c;由微通道形成网络&#xff0c;以可控流体贯穿整个系统&#xff0c;用以实现常规化学、生物、材料、光学…

SAP UI5 SmartTable 控件的使用介绍试读版

本文来自笔者 SAP 开发技术交流知识星球内一位朋友的提问&#xff1a; smartfilter bar 有个输入框Cost Element绑定了cds实现value help 请问其对应的suggestion功能是通过cds的注解实现的嘛&#xff1f; 要回答这个问题&#xff0c;我们必须首先掌握 SAP UI5 SmartTable 控件…

软考应该如何备考?

首先应该选择软考的科目&#xff0c;软考科目众多&#xff0c;计算机软件资格考试设置了27个专业资格&#xff0c;涵盖5个专业领域&#xff0c; 3个级别层次&#xff08;初级、中级、高级&#xff09;。 首先软考报名是不限学历&#xff0c;经验&#xff0c;资历的&#xff0c;…

cpu设计和实现(iverilog工具)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 编写verilog的工具不少。大家熟知的modelsim、quartus和vivado都可以用来编写的。前者主要是用来仿真&#xff0c;quartus主要用于altera芯片&…

伪元素和伪类的概念和区别

目录 伪类 伪元素 区别&#xff1a; 对于区别的解释&#xff1a; 伪类 这是菜鸟教程下方的一个笔记&#xff0c;看着多但是干货满满。 伪类选择元素基于的是当前元素处于的状态&#xff0c;或者说元素当前所具有的特性&#xff0c;而不是元素的id、class、属性等静态的标志。…

小程序获取不到用户头像和昵称返回微信用户问题解决,即小程序授权获取用户头像规则调整的最新解决方案

最近好多同学在学习石头哥小程序课程的时候&#xff0c;遇到了下面这样的问题&#xff0c;在小程序授权获取用户头像和昵称时&#xff0c;获取到的是下面这样的。 到底是什么原因导致的呢&#xff0c;去小程序官方文档一看&#xff0c;又是官方改规则了。 点进去一看&#x…

超详细!linux系统nlg-eval安装指南

前言&#xff1a;最近在做文本生成的任务&#xff0c;需要用到bleu等评价指标&#xff0c;看到其他研究工作中都在用nlg-eval这个github库&#xff0c;就想把它拿过来用&#xff0c;然而安装过程并不是一帆风顺的&#xff0c;谨以此篇博客记录之&#xff0c;为后来者提供一些经…

【菜菜的sklearn课堂笔记】逻辑回归与评分卡-重要参数penalty C

视频作者&#xff1a;菜菜TsaiTsai 链接&#xff1a;【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 正则化是用来防止模型过拟合的过程&#xff0c;常用的有L1正则化和L2正则化两种选项。这个增加的范式&#xff0c;被称为“正则项”&#xff0c;也…

11个开源测试自动化框架,如何选?

以下为作者观点&#xff1a; 如果你正在考虑建立你自己的测试自动化框架&#xff0c;请再想一想。在大多数情况下&#xff0c;你最好可以考虑一个或多个可用的开源选项。 这是因为&#xff0c;一般来说&#xff0c;框架是一套可以跨团队使用的最佳实践、假设、通用工具和库。…

操作符详解(C语言)

算术操作符(运算符)&#xff1a; - * / % 在算术运算符中&#xff0c; - * 跟我们数学中的运算是一样的 在这里主要说一下 / 跟 % 这两个操作符 1、/ &#xff08;除法&#xff09; 在除法运算中&#xff0c;若除号两边的操作数都为整型&#xff0c;则结果…

布隆过滤器(Bloom Filter)

[TOC](布隆过滤器(Bloom Filter)) &#xff08;1&#xff09;什么是布隆过滤器 &#xff08;1&#xff09;布隆过滤器的简单介绍 布隆过滤器&#xff08;Bloom Filter&#xff09;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以…

Python中的print()

本专栏为学习B站杨淑娟老师视频所记&#xff0c;仅做个人笔记使用&#x1f60b;&#x1f60b;&#x1f60b; &#x1f449;杨淑娟老师视频课&#x1f448; Python 职位方向 一、chapter1 1.使用print函数进行简单的输出 a100 # 变量a,值为100 b50 # 变量b,值为50print(90) …

【Linux实验】软中断通信

实验目的&#xff1a; 1&#xff0e;了解什么是信号&#xff0c;熟练掌握signal&#xff08;&#xff09;&#xff0c;wait&#xff08;&#xff09;&#xff0c;exit&#xff08;&#xff09;&#xff0c;kill&#xff08;&#xff09;函数。 2&#xff0e;熟悉并掌握Linux系统…

Learning to Enhance Low-Light Image via Zero-Reference Deep Curve Estimation

学习目标&#xff1a; Learning to Enhance Low-Light Image via Zero-Reference Deep Curve Estimation&#xff08;零参考深度曲线估计&#xff09; 个人体会&#xff1a; 本文的特色就是使用了PA和CA,对不同通道和不同像素做不同处理,虽然本文的实现过程懂了,但是实现去雾…

缝纫机牙架的数控工艺工装设计与编程

目 录 绪 论 1 2.差动牙架的工艺设计 3 2.1 机械加工工艺规程概述 3 2.2.1 零件的技术条件 4 2.2.2 加工表面及其要求 5 2.2.3零件的材料 6 2.3毛坯的选择 6 2.3.1毛坯的种类 6 2.4 基准的选择 8 2.5 机械加工工艺路线的拟订 10 3 差动牙架的工装设计 17 3.1 夹具概述 17 3.2 …

牛客CM11 - 链表分割【环形链表雏形】

看来真的不能乱割呀~一、题目描述二、思路分析三、代码详解【保姆级教学】四、环形链表的疑难解惑五、整体代码展示六、总结与提炼一、题目描述 描述 现有一链表的头指针 ListNode* pHead&#xff0c;给一定值x&#xff0c;编写一段代码将所有小于x的结点排在其余结点之前&am…

数据库-范式

目录 完全函数依赖部分函数依赖传递函数依赖码主属性非主属性第一范式(1NF)第二范式(2NF)第三范式(3NF)例题完全函数依赖 每一个属性都有用,缺一个都不能决定。 部分函数依赖 部分属性用不到,也可以决定 传递函数依赖