当前位置: 首页 > news >正文

使用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数据库

前言&#xff1a;因为要写一个安卓端app&#xff0c;实现从服务器中获取电影数据&#xff0c;所以需要搭建服务端代码&#xff0c;之前学过C#&#xff0c;所以想用C#实现服务器段代码用于测试&#xff0c;本文使用C#语言&#xff0c;使用asp.net core web api组件搭建服务器端&…...

LaTeX 公式与表格绘制技巧

LaTeX 公式与绘图技巧公式基本可以分为 单一公式单一编号单一公式按行编号单一公式多个子编号单一公式部分子编号分段公式现在给出各自的代码单一公式单一编号 公式1&#xff1a;equationaligned\begin{equation}\begin{aligned}a&bc\\b&a2\\c&b-3\end{aligned}\en…...

Spring Cloud--Nacos+@RefreshScope实现配置的动态更新

原文网址&#xff1a;Spring Cloud--NacosRefreshScope实现配置的动态更新_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍SpringCloud整合Nacos使用RefreshScope实现动态更新配置。 官网 Nacos Spring Cloud 快速开始 动态更新的介绍 动态更新的含义&#xff1a;修改应…...

Elasticsearch安装

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

【JavaSE API 】生成随机数的2种方法:Random类和Math类的Random方法

生成随机数的两种方法 Random类和Math类的random方法都可以用来生成随机数 而Math类的random方法则是基于系统时间的伪随机数生成器&#xff0c;大于等于0.0小于1.0的随机double值范围[0,1)。例如&#xff1a; double num1 Math.random() * 5 4;//范围[4,9) Random类是基于种…...

微软和OpenAI正在开发AI芯片, 并计划下个月发布

今年初&#xff0c;Chat**引起了无数网友关注&#xff0c;一度成为了热门话题。这是由人工智能研究实验室OpenAI开发的一款聊天机器人模型&#xff0c;也称为一种人工智能&#xff08;AI&#xff09;技术驱动的自然语言处理工具。能够通过学习和理解人类的语言来进行对话&#…...

记一次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解释器&#xff0c;其通过即时编译技术将Lua代码转换为机器代码&#xff0c;从而提供了非常快速的执行速度。在本文中&#xff0c;我们将介绍LuaJIT的原理、使用方法以及在嵌入式Linux系统中的应用示例。 LuaJIT的原理 LuaJIT基于Lua 5.1实现&#xff0…...

1.2 switch实现两个数的四则运算

注意&#xff1a; 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任务的最佳实践

在数据处理中&#xff0c;我们经常需要构建ETL的任务&#xff0c;对数据进行加载&#xff0c;转换处理后再写入到数据存储中。Google的云平台提供了多种方案来构建ETL任务&#xff0c;我也研究了一下这些方案&#xff0c;比较方案之间的优缺点&#xff0c;从而找到一个最适合我…...

【更新】囚生CYの备忘录(202331014~)

文章目录 20221014 20221014 本以为下午怡宝的比赛至少是能跑到前三&#xff0c;结果连前五都没混到&#xff0c;赛前都知道路线不可能有5km&#xff0c;因为即便是绕着主校区最外沿跑一圈也才4km出头&#xff0c;我估摸着大概是2500米&#xff0c;结果实际上只有1700米&#x…...

《UnityShader入门精要》学习4

一个最简单的顶点/片元着色器 一个最简单的顶点/片元着色器 Unity Shader的基本结构。它包含了Shader、Properties、SubShader、Fallback等语义块。顶点/片元着色器的结构与之大体类似 Shader "MyShaderName" {Properties {// 属性}SubShader {// 针对显卡A的S…...

kaggle新赛:写作质量预测大赛【数据挖掘】

赛题名称&#xff1a;Linking Writing Processes to Writing Quality 赛题链接&#xff1a;https://www.kaggle.com/competitions/linking-writing-processes-to-writing-quality 赛题背景 写作过程中存在复杂的行为动作和认知活动&#xff0c;不同作者可能采用不同的计划修…...

导入导出Excel

Springboot Easyexcel导入导出excel EasyExcel 的导出导入支持两种方式进行处理*easyexcel 导出不用监听器&#xff0c;导入需要写监听器* 一、导入&#xff1a;简单实现1. 导入依赖&#xff0c;阿里的easyexcel插件2. 程序2-1. 实体类&#xff1a;2-2. 定义一个 监听类&#…...

C# Thread.Sleep(0)有什么用?

一、理论分析 回答这个要先从线程时间精度&#xff08;时间片&#xff09;开始说起。很多参考书说&#xff0c;默认情况下&#xff0c;时间片为15ms 左右&#xff0c;但是这是已经过时的知识。在老的 Windows 操作系统里&#xff0c;应用程序模式时时间片 15ms 左右&#xff0…...

二十四、【参考素描三大面和五大调】

文章目录 三种色面(黑白灰)五种色调 这个可以参考素描对物体受光的理解&#xff1a;素描调子的基本规律与素描三大面五大调物体的明暗规律 三种色面(黑白灰) 如下图所示&#xff0c;我们可以看到光源是从亮面所对应的方向射过来的,所以我们去分析图形的时候&#xff0c;首先要…...

【Python 千题 —— 基础篇】进制转换:十进制转二进制

题目描述 题目描述 计算机底层原理中常使用二进制来表示相关机器码&#xff0c;学会将十进制数转换成二进制数是一个非常重要的技能。现在编写一个程序&#xff0c;输入一个十进制数&#xff0c;将其转换成二进制数。 输入描述 输入一个十进制数。 输出描述 程序将输入的…...

[ spring boot入门 ] java: 错误: 无效的源发行版:17

因为我目前idea中使用的是jdK8&#xff0c;而在pom.xml文件里是17&#xff0c;所以我需要将所有地方修改为jdk8 pom.xml的jdk版本为8 maven的setting.xml文件 jdk为8 还有Java Compiler 还有Project Structure 里面的project 和 module...

【计算机组成体系结构】电路基本原理与加法器设计

一、算术逻辑单元—ALU 1.基本的逻辑运算&#xff08;1bit的运算&#xff09; 基本逻辑运算分为&#xff0c;与、或、非。大家应该很熟悉了&#xff0c;与&#xff1a;全1为1&#xff0c;否则为0。或&#xff1a;全0为0&#xff0c;否则为1。非&#xff1a;取反。三个基本的逻…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...