前言:因为要写一个安卓端app,实现从服务器中获取电影数据,所以需要搭建服务端代码,之前学过C#,所以想用C#实现服务器段代码用于测试,本文使用C#语言,使用asp.net core web api组件搭建服务器端,并访问sql server 数据库。

一、安装Visual studio 2022 社区版,并安装ASP.NET和Web开发组件。

使用Visual studio installer安装好Visual studio 2022 community版本和asp.net web服务组件。如下图。

二、 创建ASP.NET Core WebAPI,选择C#语言。

如下图所示。

后面一路默认配置即可,创建后会有个实例代码,个人感觉挺有意义,对于初次使用的人很有参考价值。因为程序中用到图片转base64格式字符串和使用sqlserver数据库,需要下载NuGet程序包,下载方法,解决方案–右键–“管理解决方案的NuGet程序包”,下载如下缺少的包,如下图:

三、连接数据库,并返回查询结果

1、首先创建一个类,保存web端返回的数据,比如我创建一个电影类,客户端查询电影时,返回电影列表。

namespace MyWebServer{// 电影列表使用public class Film{public string" />using Microsoft.AspNetCore.Mvc;using Microsoft.Data.SqlClient;using System.Data;namespace MyWebServer.Controllers{[ApiController][Route("[controller]")]public class FilmListController : ControllerBase{private readonly ILogger _logger;public FilmListController(ILogger logger){_logger = logger;}[HttpPost(Name = "GetFlimList")]public IEnumerable GetFlimList(){List filmList = new List();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();}}/// /// Image 转成 base64/// /// 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 "";}}}}

3、运行web server程序,在浏览器中调试。

先修改访问服务器的IP地址为电脑局域网地址,如下图所示,测试时最好使用http协议,这样客户端访问不容易出错。

运行程序之后,会打开调试用的web页面和一个命令行窗口,如果web提示有错,说明代码有问题。在浏览器测试页面,可以测试服务器接口的可用性,点击如下图的Try it out按钮,再点击Execute按钮,即可测试接口的返回结果。