C# Web API

06-01 1258阅读

 效果图:

C# Web API

C# Web API

1.appsettings.json 配置文件,连接数据库

 "ConnectionStrings": {
   "connString": "server=.; database=CRM; uid=sa; pwd=123456;Encrypt=True;TrustServerCertificate=True;"
 }

2.  Program.cs

 public class Program
 {
     public static void Main(string[] args)
     {
         // builder构建器,把当前应用程序构建(编译,生成)。主要提供一个Ioc
         var builder = WebApplication.CreateBuilder(args);
         builder.Services.AddControllers();// 把所有的控件器“扔”到Ioc容器
         builder.Services.AddEndpointsApiExplorer();
         builder.Services.AddSwaggerGen();
         //注册上下文:AOP里面可以获取IOC对象,如果有现成框架比如Furion可以不写这一行
         builder.Services.AddHttpContextAccessor();
         //注册SqlSugar用AddScoped
         builder.Services.AddScoped(s => 
         {
             //1. 构建配置对象
             var configBuilder = new ConfigurationBuilder()
                 .SetBasePath(Directory.GetCurrentDirectory()) // 配置文件的目录
                 // optional: true如果该文件不存在也不会抛出异常
                 //reloadOnChange: true表示当配置文件发生改变时自动重新加载配置
                 .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
             IConfigurationRoot configuration = configBuilder.Build();
             //2. 获取连接字符串
             string? connString = configuration.GetConnectionString("connString");
             //3. 创建SqlSugarClient实例
             SqlSugarClient sqlSugar = new SqlSugarClient(new ConnectionConfig() 
             {
                 DbType = SqlSugar.DbType.SqlServer,//指定数据库类型
                 ConnectionString = connString,
                 IsAutoCloseConnection = true,//自动关闭数据库连接
             },
             db => 
             {
                 //配置了一个AOP(面向切面编程)
                 db.Aop.OnLogExecuting = (sql, pars)=>{ };
             });
             return sqlSugar;
         });
         // 把服务“扔”到Ioc
         builder.Services.AddSingleton();
         // app当前应用程序实例
         // 向应用程序的Ioc容器中“扔”了很多的服务,必须构建之后,服务才和当前应用融合。
         var app = builder.Build();
         if (app.Environment.IsDevelopment()) // 判断是否是开发环境,才启用接口调试的功能(即使用Swagger)
         {
             app.UseSwagger(); // 规律:UseXXX() ,使用某种服务提供的功能。
             app.UseSwaggerUI();
         }
         app.UseHttpsRedirection();// 一个中间件,用于将HTTP请求重定向到HTTPS
         app.UseAuthorization();// 授权
         // 把控件器中定义的各种接口(服务,方法)映射成一个“地址”
         app.MapControllers();
         app.Run();
     }
 }

3.Models中的Student

[SugarTable("Student")]
public class Student
{
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int Id { get; set; }
    [SugarColumn(IsNullable = false, ColumnDataType = "varchar(50)")]
    public string Name { get; set; }
}

 4.Services中的IStudent和StudentService

 public interface IStudent
 {
     bool Add(Student model);
     List Search(string strWhere);
     bool Update(Student model);
     bool Delete(int id);
 }
public class StudentService : IStudent
{
    public bool Add(Student model)
    {
        return true;
    }
    public bool Delete(int id)
    {
        return true;
    }
    public List Search(string strWhere)
    {
        // 模拟数据,省略读取数据库的逻辑:ORM框架可选:ADO.NET, EF, Dapper等。 
        return new List()
        {
            new Student(){ Id=1,Name="张三"},
            new Student(){ Id=2,Name="李四"}
        };
    }
    public bool Update(Student model)
    {
        return true;
    }
}

5.Controllers中的StuddentController

规律:

查询可以使用查询字符串传参[FromQuery]和路径传参{id}/{name}。不涉及安全性。

提交,修改,删除这些动作是有危险,建议使用请求体传参[FromBody]

 [ApiController]
 [Route("api/[controller]")]  // 生成路由:api/Student/XXX
 public class StuddentController : ControllerBase
 {
     private readonly IStudent stdentService;
     private readonly ISqlSugarClient db;
     public StuddentController(IStudent stdentService, ISqlSugarClient db)
     {
         this.stdentService = stdentService;
         this.db = db;
     }
     #region GET 查询
     // HttpGet特性表示是GET请求,主要用来获取数据
     [HttpGet("S1")] // api/Student/S1
     public IEnumerable Hello()
     {
         return new List()
         {
             new Student(){ Id=1,Name="zs"},
             new Student(){ Id=2,Name="ls"},
         };
     }
     [HttpGet("S2")]  // api/Student/S2
     public IEnumerable Hello2()
     {
         // 使用SqlSugar ORM框架
         return this.db.Queryable().ToList();
     }
     // GET请求传参问题? 异步GET?
     //传参方式1:使用查询字符串  ?key1=val1&key2=val2
     [HttpGet("S3")]
     public IEnumerable Hello3(string? name)
     {
         ISugarQueryable query = this.db.Queryable();
         if (!string.IsNullOrEmpty(name))
         {
             query = query.Where(s => s.Name.Contains(name));
         }
         return query.ToList();
     }
     // 传参数方式2:占位符(路径参数)
     [HttpGet("S4/{name}")] //friendly url友好的URL,利于推广
     public IEnumerable Hello4(string? name)
     {
         ISugarQueryable query = this.db.Queryable();
         if (!string.IsNullOrEmpty(name))
         {
             query = query.Where(s => s.Name.Contains(name));
         }
         return query.ToList();
     }
     [HttpGet("S5")]
     public IEnumerable Hello5([FromQuery] string? name)
     {
         ISugarQueryable query = this.db.Queryable();
         if (!string.IsNullOrEmpty(name))
         {
             query = query.Where(s => s.Name.Contains(name));
         }
         return query.ToList();
     }
     // 异步Get方式1
     [HttpGet("S6")]
     public async Task Hello6()
     {
         return await db.Queryable().ToListAsync();
     }
     //异步Get方式2:返回简单类型
     [HttpGet("S7")]
     public async IAsyncEnumerable Hello7()
     {
         for (int i = 0; i  
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码