使用asp.net core web api创建web后台,并连接和使用Sql Server数据库
前言:因为要写一个安卓端app,实现从服务器中获取电影数据,所以需要搭建服务端代码,之前学过C#,所以想用C#实现服务器段代码用于测试,本文使用C#语言,使用asp.net core web api组件搭建服务器端,并访问sql server 数据库。
二、 创建ASP.NET Core Web API,选择C#语言。
如下图所示



后面一路默认配置即可,创建后会有个实例代码,个人感觉挺有意义,对于初次使用的人很有参考价值。因为程序中用到图片转base64格式字符串和使用sqlserver数据库,需要下载NuGet程序包,下载方法,解决方案--右键--“管理解决方案的NuGet程序包”,下载如下缺少的包,如下图:
2.安装Nuet程序包——项目——依赖项——管理NuGet程序包(版本等级尽量一样)
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer (适用于EF Core SQL Server 提供程序)
Microsoft.EntityFrameworkCore.Tools(适用于 EF Core 的包管理器控制台工具)
Microsoft.EntityFrameworkCore.Design(适用于EF Core .NET Core CLI 工具 )

system.Drawing.Common
Newtonsoft.Json
swashbuckle.AspNetCore

三、连接数据库,并返回查询结果
1、首先创建一个类,保存web端返回的数据,比如我创建一个电影类,客户端查询电影时,返回电影列表。
namespace MyWebServer.Model
{// 电影列表使用public class Film{public string? film_name { get; set; }public string? film_type { get; set; }public string? film_desc { get; set; }// base64格式的图片public string? film_pic { get; set; }// 平均分public string? avg_score { get; set; }public string? film_video_url { get; set; }// 上架状态,待上架、已上架、已下架public string? film_status { get; set; }public string? film_up_time { get; set; }public string? film_down_time { get; set; }public string? create_time { get; set; }public string? update_time { get; set; }public string? create_oper { get; set; }public string? update_oper { get; set; }}}
2、创建controller,提供给客户端查询使用。
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;using Microsoft.Data.SqlClient;
using MyWebServer.Model;
using System.Data;
using System.Drawing;namespace MyWebServer.Controllers
{[Route("api/[controller]")][ApiController]public class FilmListController : ControllerBase{private readonly ILogger<FilmListController> _logger;public FilmListController(ILogger<FilmListController> logger){_logger = logger;}[HttpPost(Name = "GetFlimList")]public IEnumerable<Film> GetFlimList(){List<Film> filmList = new List<Film>();try{// cinema_db2为数据库名,sa为数据库登录名,dbpassword为数据库密码。// 修改sa用户密码和设置以sql server身份登录方法见:https://blog.csdn.net/newdriverest/article/details/127120083// 修改完数据库sa密码后,记得重启数据库才能生效。SqlConnection sqlConnection = new SqlConnection("Data Source=localhost;Initial Catalog=cinema_db2;Encrypt=True;Integrated Security=True;TrustServerCertificate=True;User Id=sa;Password=dbpassword");sqlConnection.Open();// 语句可从sql server management sudio查询查询语句框中直接复制过来,去掉/r/nstring sql = "SELECT [film_name],film_type," +"[film_desc],[film_pic_url],[film_video_url],film_status," +"[film_up_time],[film_down_time],[create_time],[update_time]," +"[create_oper],[update_oper]" +" FROM [cinema_db2].[dbo].[t_film]";DataSet dataSet = new DataSet();SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sql, sqlConnection);sqlDataAdapter.Fill(dataSet);// 遍历结果if (dataSet.Tables.Count > 0){// 行for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++){Film tmp = new Film();// 列for (int j = 0; j < dataSet.Tables[0].Columns.Count; j++){if (dataSet.Tables[0].Columns[j].ToString().Equals("film_name")){tmp.film_name = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();}else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_type")){tmp.film_type = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();}else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_desc")){tmp.film_desc = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();}else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_pic_url")){tmp.film_pic = ImageToBase64(dataSet.Tables[0].Rows[i].ItemArray[j].ToString());}else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_video_url")){tmp.film_video_url = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();}else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_status")){tmp.film_status = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();}else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_up_time")){tmp.film_up_time = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();}else if (dataSet.Tables[0].Columns[j].ToString().Equals("film_down_time")){tmp.film_down_time = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();}else if (dataSet.Tables[0].Columns[j].ToString().Equals("create_time")){tmp.create_time = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();}else if (dataSet.Tables[0].Columns[j].ToString().Equals("update_time")){tmp.update_time = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();}else if (dataSet.Tables[0].Columns[j].ToString().Equals("create_oper")){tmp.create_oper = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();}else if (dataSet.Tables[0].Columns[j].ToString().Equals("update_oper")){tmp.update_oper = dataSet.Tables[0].Rows[i].ItemArray[j].ToString();}}filmList.Add(tmp);}}sqlConnection.Close();// 返回的数据,客户端使用相同的类字段接收即可,比如android端使用okhttp3+retrofit2+rxJava,很方便就能获取到返回的数据return filmList.ToArray();}catch (Exception ex){Console.WriteLine(ex.Message);return filmList.ToArray();}}/// <summary>/// Image 转成 base64/// </summary>/// <param name="fileFullName"></param>public static string ImageToBase64(string fileFullName){try{if (fileFullName != null && !fileFullName.Equals("")){Bitmap bmp = new Bitmap(fileFullName);MemoryStream ms = new MemoryStream();bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);byte[] arr = new byte[ms.Length]; ms.Position = 0;ms.Read(arr, 0, (int)ms.Length); ms.Close();return Convert.ToBase64String(arr);}return "";}catch (Exception ex){return "";}}}
}
运行程序之后,会打开调试用的web页面和一个命令行窗口,在浏览器测试页面,可以测试服务器接口的可用性,点击如下图的Try it out按钮,再点击Execute按钮,即可测试接口的返回结果。

相关文章:
使用asp.net core web api创建web后台,并连接和使用Sql Server数据库
前言:因为要写一个安卓端app,实现从服务器中获取电影数据,所以需要搭建服务端代码,之前学过C#,所以想用C#实现服务器段代码用于测试,本文使用C#语言,使用asp.net core web api组件搭建服务器端&…...
LaTeX 公式与表格绘制技巧
LaTeX 公式与绘图技巧公式基本可以分为 单一公式单一编号单一公式按行编号单一公式多个子编号单一公式部分子编号分段公式现在给出各自的代码单一公式单一编号 公式1:equationaligned\begin{equation}\begin{aligned}a&bc\\b&a2\\c&b-3\end{aligned}\en…...
Spring Cloud--Nacos+@RefreshScope实现配置的动态更新
原文网址:Spring Cloud--NacosRefreshScope实现配置的动态更新_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍SpringCloud整合Nacos使用RefreshScope实现动态更新配置。 官网 Nacos Spring Cloud 快速开始 动态更新的介绍 动态更新的含义:修改应…...
Elasticsearch安装
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
【JavaSE API 】生成随机数的2种方法:Random类和Math类的Random方法
生成随机数的两种方法 Random类和Math类的random方法都可以用来生成随机数 而Math类的random方法则是基于系统时间的伪随机数生成器,大于等于0.0小于1.0的随机double值范围[0,1)。例如: double num1 Math.random() * 5 4;//范围[4,9) Random类是基于种…...
微软和OpenAI正在开发AI芯片, 并计划下个月发布
今年初,Chat**引起了无数网友关注,一度成为了热门话题。这是由人工智能研究实验室OpenAI开发的一款聊天机器人模型,也称为一种人工智能(AI)技术驱动的自然语言处理工具。能够通过学习和理解人类的语言来进行对话&#…...
记一次Hbase2.1.x历史数据数据迁移方案
查看待迁移的表 list_namespace_tables vaas_dwm2. 制作待迁移表“DWM_TRIP_PART”的快照 snapshot vaas_dwm:DWM_TRIP_PART,dwm_trip_part_snapshot3. 统计待迁移表数据总数 hbase org.apache.hadoop.hbase.mapreduce.RowCounter vaas_dwm:DWM_TRIP_PART...
luajit简介
LuaJIT是一种高效的Lua解释器,其通过即时编译技术将Lua代码转换为机器代码,从而提供了非常快速的执行速度。在本文中,我们将介绍LuaJIT的原理、使用方法以及在嵌入式Linux系统中的应用示例。 LuaJIT的原理 LuaJIT基于Lua 5.1实现࿰…...
1.2 switch实现两个数的四则运算
注意: 1、每一个case后面要有break 2、/运算的时候注意分母不能为0 int a, b;char c;cin>>a>>b>>c;switch (c){case :cout << a << << b << << a b << endl;break;case -:cout << a << - …...
mysql面试题47:MySQL中Innodb的事务实现原理
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Innodb的事务实现原理 InnoDB是MySQL中一种常用的存储引擎,它支持事务和行级锁等特性。以下是InnoDB事务实现的简要原理: 事务定义: 事务是指一…...
Google云平台构建数据ETL任务的最佳实践
在数据处理中,我们经常需要构建ETL的任务,对数据进行加载,转换处理后再写入到数据存储中。Google的云平台提供了多种方案来构建ETL任务,我也研究了一下这些方案,比较方案之间的优缺点,从而找到一个最适合我…...
【更新】囚生CYの备忘录(202331014~)
文章目录 20221014 20221014 本以为下午怡宝的比赛至少是能跑到前三,结果连前五都没混到,赛前都知道路线不可能有5km,因为即便是绕着主校区最外沿跑一圈也才4km出头,我估摸着大概是2500米,结果实际上只有1700米&#x…...
《UnityShader入门精要》学习4
一个最简单的顶点/片元着色器 一个最简单的顶点/片元着色器 Unity Shader的基本结构。它包含了Shader、Properties、SubShader、Fallback等语义块。顶点/片元着色器的结构与之大体类似 Shader "MyShaderName" {Properties {// 属性}SubShader {// 针对显卡A的S…...
kaggle新赛:写作质量预测大赛【数据挖掘】
赛题名称:Linking Writing Processes to Writing Quality 赛题链接:https://www.kaggle.com/competitions/linking-writing-processes-to-writing-quality 赛题背景 写作过程中存在复杂的行为动作和认知活动,不同作者可能采用不同的计划修…...
导入导出Excel
Springboot Easyexcel导入导出excel EasyExcel 的导出导入支持两种方式进行处理*easyexcel 导出不用监听器,导入需要写监听器* 一、导入:简单实现1. 导入依赖,阿里的easyexcel插件2. 程序2-1. 实体类:2-2. 定义一个 监听类&#…...
C# Thread.Sleep(0)有什么用?
一、理论分析 回答这个要先从线程时间精度(时间片)开始说起。很多参考书说,默认情况下,时间片为15ms 左右,但是这是已经过时的知识。在老的 Windows 操作系统里,应用程序模式时时间片 15ms 左右࿰…...
二十四、【参考素描三大面和五大调】
文章目录 三种色面(黑白灰)五种色调 这个可以参考素描对物体受光的理解:素描调子的基本规律与素描三大面五大调物体的明暗规律 三种色面(黑白灰) 如下图所示,我们可以看到光源是从亮面所对应的方向射过来的,所以我们去分析图形的时候,首先要…...
【Python 千题 —— 基础篇】进制转换:十进制转二进制
题目描述 题目描述 计算机底层原理中常使用二进制来表示相关机器码,学会将十进制数转换成二进制数是一个非常重要的技能。现在编写一个程序,输入一个十进制数,将其转换成二进制数。 输入描述 输入一个十进制数。 输出描述 程序将输入的…...
[ spring boot入门 ] java: 错误: 无效的源发行版:17
因为我目前idea中使用的是jdK8,而在pom.xml文件里是17,所以我需要将所有地方修改为jdk8 pom.xml的jdk版本为8 maven的setting.xml文件 jdk为8 还有Java Compiler 还有Project Structure 里面的project 和 module...
【计算机组成体系结构】电路基本原理与加法器设计
一、算术逻辑单元—ALU 1.基本的逻辑运算(1bit的运算) 基本逻辑运算分为,与、或、非。大家应该很熟悉了,与:全1为1,否则为0。或:全0为0,否则为1。非:取反。三个基本的逻…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
