Lenka.Guo 发表于 2021-11-4 10:14:07

.Net Core API 连接Mysql数据库返回JSON 数据供ActiveReportsJS 使用

示例源码:


操作步骤:

1. 使用Mysql工具创建我们需要的mysql database 表
CREATE TABLE dbo.department(
DepartmentId int AUTO_INCREMENT,
DepartmentName nvarchar(500),
PRIMARY KEY (DepartmentId)
)插入表:
INSERT into dbo.Department (DepartmentName) VALUES ('IT')
INSERT into dbo.Department (DepartmentName) VALUES ('Support')

employee表:


create table dbo.Employee(
EmployeeId int AUTO_INCREMENT,
EmployeeName nvarchar(500),
Department nvarchar(500),
DateOfJoining datetime,
PhotoFileName nvarchar(500),
PRIMARY KEY(EmployeeId)
);

insert into dbo.Employee(EmployeeName,Department,DateOfJoining,PhotoFileName)
values                  ('Bob','IT','2021-06-21','anonymous.png');

select * from dbo.Employee;2. 创建.Net Core Web API 项目


-> launchSettings.json :文件包含了如何启动项目的细节描述-> Controllers 文件夹:包含了API controler 方法-> We generally keep the configuration details such as database details in appSettings.json.-> program.cs 是程序的主入口 Main() 它还创建了网络主机,基本上可以帮助应用程序监听http请求。-> startup类 class 类配置了我们的应用程序所需的所有服务。类配置了我们应用程序所需的所有服务。服务基本上是可重复使用的组件,可以使用依赖性在我们的应用程序中使用。

3. 配置允许跨域:


using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.OpenApi.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication11
{
    public class Startup
    {
      public Startup(IConfiguration configuration)
      {
            Configuration = configuration;
      }

      public IConfiguration Configuration { get; }

      // This method gets called by the runtime. Use this method to add services to the container.
      public void ConfigureServices(IServiceCollection services)
      {
            services.AddCors(c=> {
                c.AddPolicy("AllowOrigin",options=>options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
            });
            services.AddControllers();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApplication11", Version = "v1" });
            });
      }

      // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
      public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
      {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApplication11 v1"));
            }

            app.UseCors(options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
      }
    }
}




4. 安装 JSON 序列化nuget 包 帮助我们提供JSON 序列化和反序列化的函数



Startup.cs 完整代码:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.OpenApi.Models;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication11
{
    public class Startup
    {
      public Startup(IConfiguration configuration)
      {
            Configuration = configuration;
      }

      public IConfiguration Configuration { get; }

      // This method gets called by the runtime. Use this method to add services to the container.
      public void ConfigureServices(IServiceCollection services)
      {
            services.AddCors(c=> {
                c.AddPolicy("AllowOrigin",options=>options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
            });
            services.AddControllersWithViews().AddNewtonsoftJson(options =>
            options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore)
                .AddNewtonsoftJson(options => options.SerializerSettings.ContractResolver
                = new DefaultContractResolver());

            services.AddControllers();
            services.AddControllers();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApplication11", Version = "v1" });
            });
      }

      // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
      public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
      {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApplication11 v1"));
            }

            app.UseCors(options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });

            app.UseStaticFiles(new StaticFileOptions
            {
                FileProvider = new PhysicalFileProvider(
               Path.Combine(Directory.GetCurrentDirectory(), "Photos")),
                RequestPath = "/Photos"
            });
      }
    }
}

以下代码是指定图像上传的地址:
{
                FileProvider = new PhysicalFileProvider(
                   Path.Combine(Directory.GetCurrentDirectory(), "Photos")),
                RequestPath = "/Photos"
            });


5. 为了连接Mysql 数据库,先安装MysqlData nuget包



6.添加数据模型 Model:

Department.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication1.Models
{
    public class Department
    {
      public int DepartmentId { get; set; }

      public string DepartmentName { get; set; }
    }
}Employee.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication1.Models
{
    public class Employee
    {
      public int EmployeeId { get; set; }
      public string EmployeeName {get; set; }
      public string Department { get; set; }

      public string DateOfJoining { get; set; }

      public stringPhotoFileName { get; set; }
    }
}

7. 在appSettings.json 文件中添加数据库连接字符串:


8. 添加对应Model的controller:
DepartmentController.cs:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using WebApplication1.Models;

namespace WebApplication1.Controllers
{
    ")]
   
    public class DepartmentController : ControllerBase
    {
      private readonly IConfiguration _configuration;
      public DepartmentController(IConfiguration configuration)
      {
            _configuration = configuration;
      }

      
      public JsonResult Get()
      {
            string query = @"
                        select DepartmentId,DepartmentName from
                        dbo.Department
            ";

            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("EmployeeAppCon");
            MySqlDataReader myReader;
            using(MySqlConnection mycon=new MySqlConnection(sqlDataSource))
            {
                mycon.Open();
                using(MySqlCommand myCommand=new MySqlCommand(query, mycon))
                {
                  myReader = myCommand.ExecuteReader();
                  table.Load(myReader);

                  myReader.Close();
                  mycon.Close();
                }
            }

            return new JsonResult(table);
      }


      
      public JsonResult Post(Department dep)
      {
            string query = @"
                        insert into dbo.Department (DepartmentName) values
                                                    (@DepartmentName);
                        
            ";

            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("EmployeeAppCon");
            MySqlDataReader myReader;
            using (MySqlConnection mycon = new MySqlConnection(sqlDataSource))
            {
                mycon.Open();
                using (MySqlCommand myCommand = new MySqlCommand(query, mycon))
                {
                  myCommand.Parameters.AddWithValue("@DepartmentName", dep.DepartmentName);
                  
                  myReader = myCommand.ExecuteReader();
                  table.Load(myReader);

                  myReader.Close();
                  mycon.Close();
                }
            }

            return new JsonResult("Added Successfully");
      }


      
      public JsonResult Put(Department dep)
      {
            string query = @"
                        update dbo.Department set
                        DepartmentName =@DepartmentName
                        where DepartmentId=@DepartmentId;
                        
            ";

            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("EmployeeAppCon");
            MySqlDataReader myReader;
            using (MySqlConnection mycon = new MySqlConnection(sqlDataSource))
            {
                mycon.Open();
                using (MySqlCommand myCommand = new MySqlCommand(query, mycon))
                {
                  myCommand.Parameters.AddWithValue("@DepartmentId", dep.DepartmentId);
                  myCommand.Parameters.AddWithValue("@DepartmentName", dep.DepartmentName);

                  myReader = myCommand.ExecuteReader();
                  table.Load(myReader);

                  myReader.Close();
                  mycon.Close();
                }
            }

            return new JsonResult("Updated Successfully");
      }



      
      public JsonResult Delete(int id)
      {
            string query = @"
                        delete from dbo.Department
                        where DepartmentId=@DepartmentId;
                        
            ";

            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("EmployeeAppCon");
            MySqlDataReader myReader;
            using (MySqlConnection mycon = new MySqlConnection(sqlDataSource))
            {
                mycon.Open();
                using (MySqlCommand myCommand = new MySqlCommand(query, mycon))
                {
                  myCommand.Parameters.AddWithValue("@DepartmentId", id);

                  myReader = myCommand.ExecuteReader();
                  table.Load(myReader);

                  myReader.Close();
                  mycon.Close();
                }
            }

            return new JsonResult("Deleted Successfully");
      }

    }
}EmployeeController.cs:
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using WebApplication1.Models;

namespace WebApplication1.Controllers
{
    ")]
   
    public class EmployeeController : ControllerBase
    {
      private readonly IConfiguration _configuration;
      private readonly IWebHostEnvironment _env;
      public EmployeeController(IConfiguration configuration,IWebHostEnvironment env)
      {
            _configuration = configuration;
            _env = env;
      }

      
      public JsonResult Get()
      {
            string query = @"
                        select EmployeeId,EmployeeName,Department,
                        DATE_FORMAT(DateOfJoining,'%Y-%m-%d') as DateOfJoining,
                        PhotoFileName
                        from
                        dbo.Employee
            ";

            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("EmployeeAppCon");
            MySqlDataReader myReader;
            using (MySqlConnection mycon = new MySqlConnection(sqlDataSource))
            {
                mycon.Open();
                using (MySqlCommand myCommand = new MySqlCommand(query, mycon))
                {
                  myReader = myCommand.ExecuteReader();
                  table.Load(myReader);

                  myReader.Close();
                  mycon.Close();
                }
            }

            return new JsonResult(table);
      }


      
      public JsonResult Post(Employee emp)
      {
            string query = @"
                        insert into dbo.Employee
                        (EmployeeName,Department,DateOfJoining,PhotoFileName)
                        values
                         (@EmployeeName,@Department,@DateOfJoining,@PhotoFileName) ;
                        
            ";

            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("EmployeeAppCon");
            MySqlDataReader myReader;
            using (MySqlConnection mycon = new MySqlConnection(sqlDataSource))
            {
                mycon.Open();
                using (MySqlCommand myCommand = new MySqlCommand(query, mycon))
                {
                  myCommand.Parameters.AddWithValue("@EmployeeName", emp.EmployeeName);
                  myCommand.Parameters.AddWithValue("@Department", emp.Department);
                  myCommand.Parameters.AddWithValue("@DateOfJoining", emp.DateOfJoining);
                  myCommand.Parameters.AddWithValue("@PhotoFileName", emp.PhotoFileName);

                  myReader = myCommand.ExecuteReader();
                  table.Load(myReader);

                  myReader.Close();
                  mycon.Close();
                }
            }

            return new JsonResult("Added Successfully");
      }


      
      public JsonResult Put(Employee emp)
      {
            string query = @"
                        update dbo.Employee set
                        EmployeeName =@EmployeeName,
                        Department =@Department,
                        DateOfJoining =@DateOfJoining,
                        PhotoFileName =@PhotoFileName
                        where EmployeeId=@EmployeeId;
                        
            ";

            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("EmployeeAppCon");
            MySqlDataReader myReader;
            using (MySqlConnection mycon = new MySqlConnection(sqlDataSource))
            {
                mycon.Open();
                using (MySqlCommand myCommand = new MySqlCommand(query, mycon))
                {
                  myCommand.Parameters.AddWithValue("@EmployeeId", emp.EmployeeId);
                  myCommand.Parameters.AddWithValue("@EmployeeName", emp.EmployeeName);
                  myCommand.Parameters.AddWithValue("@Department", emp.Department);
                  myCommand.Parameters.AddWithValue("@DateOfJoining", emp.DateOfJoining);
                  myCommand.Parameters.AddWithValue("@PhotoFileName", emp.PhotoFileName);

                  myReader = myCommand.ExecuteReader();
                  table.Load(myReader);

                  myReader.Close();
                  mycon.Close();
                }
            }

            return new JsonResult("Updated Successfully");
      }



      
      public JsonResult Delete(int id)
      {
            string query = @"
                        delete from dbo.Employee
                        where EmployeeId=@EmployeeId;
                        
            ";

            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("EmployeeAppCon");
            MySqlDataReader myReader;
            using (MySqlConnection mycon = new MySqlConnection(sqlDataSource))
            {
                mycon.Open();
                using (MySqlCommand myCommand = new MySqlCommand(query, mycon))
                {
                  myCommand.Parameters.AddWithValue("@EmployeeId", id);

                  myReader = myCommand.ExecuteReader();
                  table.Load(myReader);

                  myReader.Close();
                  mycon.Close();
                }
            }

            return new JsonResult("Deleted Successfully");
      }


      
      
      public JsonResult SaveFile()
      {
            try
            {

                var httpReuest = Request.Form;
                var postedFile = httpReuest.Files;
                string filename = postedFile.FileName;
                var physicalPath = _env.ContentRootPath + "/Photos/" + filename;

                using(var stream=new FileStream(physicalPath, FileMode.Create))
                {
                  postedFile.CopyTo(stream);
                }

                return new JsonResult(filename);
            }
            catch (Exception)
            {

                return new JsonResult("anonymous.png");
            }
      }
    }
}

运行编译即可启动 WebAPI 并在其他项目中调用了。
页: [1]
查看完整版本: .Net Core API 连接Mysql数据库返回JSON 数据供ActiveReportsJS 使用