使用asp.net core web api创建web后台,并连接和使用Sql Server数据库

这篇具有很好参考价值的文章主要介绍了使用asp.net core web api创建web后台,并连接和使用Sql Server数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:因为要写一个安卓端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 后端,C#,asp.net,数据库,后端

asp.net 后端,C#,asp.net,数据库,后端

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

如下图所示。

asp.net 后端,C#,asp.net,数据库,后端

asp.net 后端,C#,asp.net,数据库,后端

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

asp.net 后端,C#,asp.net,数据库,后端

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

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

namespace MyWebServer
{
    // 电影列表使用
    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.Mvc;
using Microsoft.Data.SqlClient;
using System.Data;

namespace MyWebServer.Controllers
{
    [ApiController]
    [Route("[controller]")]
    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/n
                string 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 "";
            }
        }
    }
}

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

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

asp.net 后端,C#,asp.net,数据库,后端

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

asp.net 后端,C#,asp.net,数据库,后端文章来源地址https://www.toymoban.com/news/detail-624769.html

到了这里,关于使用asp.net core web api创建web后台,并连接和使用Sql Server数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在 ASP.NET Core Web API 中使用异常筛选器捕获和统一处理异常

    在 ASP.NET Core Web API 中,异常筛选器(Exception Filter)是一种用于处理发生在 Web API 控制器或管道中的异常的机制。 异常筛选器可以捕获和处理应用程序中发生的异常,当系统中出现未经处理的异常的时候,异常筛选器就会执行,我们可以在异常筛选器中对异常进行处理,例如

    2024年01月19日
    浏览(41)
  • ASP.NET Core Web API用户身份验证

    ASP.NET Core Web API用户身份验证的方法有很多,本文只介绍JWT方法。JWT实现了服务端无状态,在分布式服务、会话一致性、单点登录等方面凸显优势,不占用服务端资源。简单来说,JWT的验证过程如下所示: (1)通过用户名和密码获取一个Token。 (2)访问API时,加上这个Toke

    2024年02月11日
    浏览(48)
  • ASP.NET Core 中的两种 Web API

    ASP.NET Core 有两种创建 RESTful Web API 的方式: 基于 Controller,使用完整的基于ControllerBase的基类定义接口endpoints。 基于 Minimal APIs,使用Lambda表达式定义接口 endpoints。 基于 Controller 的 Web API 可以使用构造函数注入,或者属性注入,遵循面向对象模式。 基于 Minimal APIs 的 Web API 通

    2024年02月09日
    浏览(41)
  • ASP.NET Core Web API 流式返回,逐字显示

    Websocket、SSE(Server-Sent Events)和长轮询(Long Polling)都是用于网页和服务端通信的技术。 Websocket是一种全双工通信协议,能够实现客户端和服务端之间的实时通信。它基于TCP协议,并且允许服务器主动向客户端推送数据,同时也允许客户端向服务器发送数据。 SSE是一种单向

    2023年04月23日
    浏览(50)
  • ASP.NET Core Web API之Token验证

    在实际开发中,我们经常需要对外提供接口以便客户获取数据,由于数据属于私密信息,并不能随意供其他人访问,所以就需要验证客户身份。那么如何才能验证客户的什么呢?今天以一个简单的小例子,简述ASP.NET Core Web API开发过程中,常用的一种JWT身份验证方式。仅供学

    2024年02月11日
    浏览(47)
  • ASP.NET Core 中基于 Minimal APIs 的Web API

    Minimal APIs 是ASP.NET Core中快速构建 REST API 的方式,可以用最少的代码构建全功能的REST API。比如下面三行代码: 可以实现在请求网站根目录结点的时候,返回\\\"Hello World!\\\"。 这种方式的Web API可以用于构建微服务,极简功能的网站。 下面代码,将几个 HTTP 请求的 url映射到 Lambda

    2024年02月10日
    浏览(41)
  • 2.1 .net 8 ASP.NET Core Web API - Controller详解

    书接上回,上节我们留了几个问题,即: 1、接口Hello的名字究竟怎么来的? 2、我们如果想把接口改成其他的名称,应该怎么做? 3、我们继承ControllerBase,以及[Route(“[controller]”)]属性,又是分别起到什么作用? 需要解决以上几个问题,我们就要继续深入研究Controller相关的

    2024年02月20日
    浏览(47)
  • ASP.NET Core 中基于 Controller 的 Web API

    客户端发送Http请求,Contoller响应请求,并从数据库读取数据,序列化数据,然后通过 Http Response返回序列化的数据。 Web API 的所有controllers 一般继承于 ControllerBase 类,而不是Controller 类。 因为 Controller 类也继承自ControllerBase 类,但是支持views,而API一般不需要这个功能。 Co

    2024年02月10日
    浏览(65)
  • 在 ASP.NET Core Web API 中处理 Patch 请求

    PUT 和 PATCH 方法用于更新现有资源。 它们之间的区别是,PUT 会替换整个资源,而 PATCH 仅指定更改。 在 ASP.NET Core Web API 中,由于 C# 是一种静态语言( dynamic 在此不表),当我们定义了一个类型用于接收 HTTP Patch 请求参数的时候,在 Action 中无法直接从实例中得知客户端提供了哪

    2024年02月04日
    浏览(51)
  • 【服务器】ASP.Net Core(C#)创建Web站点

    简单几步实现本地ASP.Net.Core web 站点结合cpolar内网穿透工具实现远程访问 1. 创建站点 *环境搭建,这边测试,使用.NET 6.0 SDK,可以点击跳转到官网下载,下载后安装即可. 安装完成后,进入到某个文件夹,打开powershell执行下面命令,创建新的 Web 应用,名称叫:aspnetcoreapp 2. 运行站点 信任开

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包