使用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按钮,即可测试接口的返回结果。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全典型配置(二)使用ACL限制用户在特定时间访问特定服务器的权限

安全典型配置&#xff08;一&#xff09;使用ACL限制FTP访问权限案例_厦门微思网络的博客-CSDN博客本例中配置的本地用户登录密码方式为irreversible-cipher&#xff0c;表示对用户密码采用不可逆算法进行加密&#xff0c;非法用户无法通过解密算法特殊处理后得到密码&#xff…

在Windows下自己从源码编译Python3.10.13成安装包

文章目录 &#xff08;一&#xff09;Python 3.10 的生命周期&#xff08;一&#xff09;下载源码&#xff08;二&#xff09;准备环境&#xff08;三&#xff09;编译&#xff08;3.1&#xff09;解压源码到目录&#xff08;3.2&#xff09;下载依赖&#xff08;PCBuild&#…

硬件基本功--过流、过压保护电路

1.简介 过流保护(OCP)&#xff1a;当电路电流超过预定最大值时&#xff0c;使保护装置动作的一种保护方式。不允许超过预定最大值电流&#xff0c;不然会烧坏电路的器件。过压保护(OVP)&#xff1a;被保护电路电压超过预定的最大值时&#xff0c;使电源断开或使受控设备电压降低…

多列等高实现

预期效果 多列等高,左右两列高度自适应且一样,分别设置不同背景色效果预览: 分别由6种方法实现 1、使用padding + margin + overflow 实现多列等高效果,具有良好的兼容性; 2、border实现多列等高,左边框宽度为200px,左列浮动,伪元素清除浮动; 3、父元素线性渐变背景色…

写进简历的软件测试项目实战经验(包含电商、银行、app等)

前言&#xff1a; 今天给大家带来几个软件测试项目的实战总结及经验&#xff0c;适合想自学、转行或者面试的朋友&#xff0c;可以写进简历里的那种哦。 1、项目名称: 家电购 项目描述&#xff1a; “家电购”商城系统是基于 web 浏览器的电子商务系统&#xff0c;通过互联…

canvas力导布局

老规矩&#xff0c;先上效果图 <html><head><style>* {margin: 0;padding: 0;}canvas {display: block;width: 100%;height: 100%;background: #000;}</style> </head><body><canvas id"network"></canvas> </…

RCD吸收电路的工作原理及参数计算方法详解

在电子电力技术和自动化控制领域内&#xff0c;RCD吸收电路非常重要&#xff0c;它的作用是吸收瞬间过电压和过电路免受电压波动的影响&#xff0c;因此被广泛应用在各种设备及系统中&#xff0c;今天凡亿将带领小伙伴们来了解下RCD吸收电路的工作原理及计算方法。 1、RCD吸收电…

景联文科技:3D点云标注应用场景和专业平台

3D点云技术之所以得到广泛发展和应用&#xff0c;主要是因为它能够以一种直观、真实和全面的方式来表示和获取现实世界中的三维信息。 3D点云的优势&#xff1a; 真实感和立体感&#xff1a;3D点云数据能够呈现物体的真实感和立体感&#xff0c;使观察者能够更直观地理解物体的…

git基础

Git 版本控制 什么是版本控制 版本控制是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。 除了项目源代码&#xff0c;你可以对任何类型的文件进行版本控制。 为什么要版本控制 有了它你就可以将某个文件回溯到之前的状态&#xff0c;甚…

用AIGC做私活真的太赚了...

说个小道消息&#xff0c;传统涨薪跳槽旺季即将结束&#xff0c;使用AIGC技术已然迎接私活的高潮期&#xff01;各行业对【AIGC】的需求在短时间内暴增。 估计圈子里的朋友都不会闲着&#xff0c;会趁着旺季赚一笔。 所以&#xff0c;近段时间知识星球很多粉丝朋友收到了很多…

外贸全流程30个邮件模板分享

经常有外贸朋友询问&#xff0c;我这里是否有各种邮件模板&#xff0c;比如开发信、客户跟进、询盘回复、报价还盘、催款等等。 这里&#xff0c;给大家从网上搬来了&#xff0c;而且内容非常齐全。 以下30种邮件模板&#xff0c;请收好&#xff01; 外贸开发信&#xff08;1&a…

让视频更加完美——Adobe Premiere Pro 2024 (Pr2024)正式发布!

如果您是一名视频制作人员&#xff0c;或者是想把自己的视频制作得更加完美的业余爱好者&#xff0c;那么您一定听说过Adobe Premiere Pro。Adobe Premiere Pro是一款功能强大、稳定可靠的视频编辑软件&#xff0c;被广泛应用于电影、电视、广告等行业。 现在&#xff0c;好消…