第二篇 Asp.Net Core WebAPI 连接Sqlserver数据库及WebAPI服务发布
前言 Core API可以在业务与数据的模式下提供了一项安全、可靠的数据接口服务方式,我们借助于Core API可以为移动端、物联网终端、互联网终端等设备提供在线数据访问服务,本文重点介绍Core API项目创建、Sqlserver数据CRUD操作、服务发布(WinDows服务器和Linux服务器),侧重入门实操,大侠绕步!
学习目标:
1)使用Vs2019创建Core API项目;
2)如何实现Core API连接Sqlserver数据库,并且实现CRUD操作;
3)搭建Swagger,实现可视化的API页面。
4)在Windows和Linux服务器发布Core API应用。
前期准备工具:
Vs2019 IDE环境、Sqlserver2008、Windows服务器、Linux服务器。
一、使用Vs2019创建WebAPI项目
新建一个项目名称为WebApi的工程,Core版本选择3.1,项目类型选择“ASP.NET Core Web API”,如下图所示
使用项目模板自动生成了一个未来5天天气情况的Json字符串,运行后如下图所示:
[{ "date": "2021-11-25T15:15:48.3451682+08:00", "temperatureC": 3, "temperatureF": 37, "summary": "Scorching" }, { "date": "2021-11-26T15:15:48.3481578+08:00", "temperatureC": 17, "temperatureF": 62, "summary": "Scorching" }, { "date": "2021-11-27T15:15:48.3481611+08:00", "temperatureC": -9, "temperatureF": 16, "summary": "Bracing" }, { "date": "2021-11-28T15:15:48.3481614+08:00", "temperatureC": 49, "temperatureF": 120, "summary": "Hot" }, { "date": "2021-11-29T15:15:48.3481615+08:00", "temperatureC": 35, "temperatureF": 94, "summary": "Warm" }]
项目中的文件和文件夹主要有:Controllers(控制器),appsettings.json(配置数据库等连接参数),Program.cs(软件启动项设置),Startup.cs(注册路由和服务)
二、建立SqlServer数据库CRUD操作
2.1 配置Sqlserver参数,导入Core Nuget程序包
Core Web API和MVC配置类似,需要先导入NuGet包,appsettings.json文件中配置Sql数据库连接参数,Startup.cs中配置连接服务。
三个NuGet包分别为:Microsoft.EntityFrameworkCore(5.0.12)、Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools、Microsoft.VisualStudio.Web.CodeGenerators.Design
右键点击项目资源,选择“管理NuGet程序包”
在appsetting.json文件中设置数据库连接字符串
1 { 2 "Logging": { 3 "LogLevel": { 4 "Default": "Information", 5 "Microsoft": "Warning", 6 "Microsoft.Hosting.Lifetime": "Information" 7 } 8 }, 9 "AllowedHosts": "*", 10 "ConnectionStrings": { 11 "MVCSqlContext": "Server=localhost;Database=InfoUser;User ID=sa;Password=sa;" 12 } 13 }
在Startup.cs文件中配置连接服务,如下图所示
1 // This method gets called by the runtime. Use this method to add services to the container. 2 public void ConfigureServices(IServiceCollection services) 3 { 4 services.AddControllersWithViews(); 5 //下面为加入的数据库服务,注意MVCSqlContext修改为自己的文件名 6 services.AddDbContext<InfoUserContext>(options => 7 options.UseSqlServer(Configuration.GetConnectionString("MVCSqlContext"))); 8 9 10 11 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0); 12 }
2.2 添加Model模型类、用于CRUDSqlserver数据业务的控制器
首先,在Sqlserver数据库创建数据库名为InfoUser的数据库,建立一个UserData表,表结构如下:
在项目中添加一个“Models”文件夹,右键点击Models添加类文件,类的名称为UserData
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.ComponentModel.DataAnnotations; 6 using System.ComponentModel.DataAnnotations.Schema; 7 8 namespace MVC_SQL_Test.Models 9 { 10 public partial class UserData 11 { 12 [Key, Column(Order = 1)] 13 public int UserId { get; set; } 14 public string UserName { get; set; } 15 public string Password { get; set; } 16 } 17 }
手动添加一个API 控制器,右键点击Models,依次选择“添加”->"控制器"->“EF 控制器”
控制器自动生成后,点击项目调试运行:https://localhost:44364/api/UserDatas/5,运行结果如下:
注意:在API项目中也可以同时创建MVC 控制器和Views页面,可参考第一篇。
三、创建Swagger可视化(RESTFull)服务
第一步:需要导入Swagger NuGet包,右键选中项目依次点击“NuGet包管理器”->输入“Swashbuckle.AspNetCore”
第二步:在Startup.cs文件中注册Swagger服务,代码如下图所示:
1 using Microsoft.AspNetCore.Builder; 2 using Microsoft.AspNetCore.Hosting; 3 using Microsoft.AspNetCore.HttpsPolicy; 4 using Microsoft.AspNetCore.Mvc; 5 using Microsoft.Extensions.Configuration; 6 using Microsoft.Extensions.DependencyInjection; 7 using Microsoft.Extensions.Hosting; 8 using Microsoft.Extensions.Logging; 9 using Microsoft.OpenApi.Models; 10 using System; 11 using System.Collections.Generic; 12 using System.Linq; 13 using System.Threading.Tasks; 14 using Microsoft.EntityFrameworkCore; 15 using WebApi.Data; 16 17 namespace WebApi 18 { 19 public class Startup 20 { 21 public Startup(IConfiguration configuration) 22 { 23 Configuration = configuration; 24 } 25 26 public IConfiguration Configuration { get; } 27 28 // This method gets called by the runtime. Use this method to add services to the container. 29 public void ConfigureServices(IServiceCollection services) 30 { 31 32 services.AddControllers(); 33 services.AddSwaggerGen(c => 34 { 35 c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApi", Version = "v1" }); 36 }); 37 38 services.AddDbContext<WebApiContext>(options => 39 options.UseSqlServer(Configuration.GetConnectionString("WebApiContext"))); 40 } 41 42 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 43 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 44 { 45 if (env.IsDevelopment()) 46 { 47 app.UseDeveloperExceptionPage(); 48 app.UseSwagger(); 49 app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApi v1")); 50 } 51 52 app.UseHttpsRedirection(); 53 54 app.UseRouting(); 55 56 app.UseAuthorization(); 57 58 app.UseEndpoints(endpoints => 59 { 60 endpoints.MapControllers(); 61 }); 62 } 63 } 64 }
最终运行效果如下图所示: