帝国网站管理系统后台e,class,config.php不存在,中国摄影网站十大排名,网站建设百度首页,山东省建设局网站前言#xff1a;因为要写一个安卓端app#xff0c;实现从服务器中获取电影数据#xff0c;所以需要搭建服务端代码#xff0c;之前学过C##xff0c;所以想用C#实现服务器段代码用于测试#xff0c;本文使用C#语言#xff0c;使用asp.net core web api组件搭建服务器端因为要写一个安卓端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 ILoggerFilmListController _logger;public FilmListController(ILoggerFilmListController logger){_logger logger;}[HttpPost(Name GetFlimList)]public IEnumerableFilm GetFlimList(){ListFilm filmList new ListFilm();try{// cinema_db2为数据库名sa为数据库登录名dbpassword为数据库密码。// 修改sa用户密码和设置以sql server身份登录方法见https://blog.csdn.net/newdriverest/article/details/127120083// 修改完数据库sa密码后记得重启数据库才能生效。SqlConnection sqlConnection new SqlConnection(Data Sourcelocalhost;Initial Catalogcinema_db2;EncryptTrue;Integrated SecurityTrue;TrustServerCertificateTrue;User Idsa;Passworddbpassword);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端使用okhttp3retrofit2rxJava很方便就能获取到返回的数据return filmList.ToArray();}catch (Exception ex){Console.WriteLine(ex.Message);return filmList.ToArray();}}/// summary/// Image 转成 base64/// /summary/// param namefileFullName/parampublic 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按钮即可测试接口的返回结果。