webapi+sqlsugar+net6.0 c#代码

时间: 2023-10-25 17:04:08 浏览: 45
WebAPI是一种开发模式,用于构建和提供Web服务接口。它基于HTTP协议,通过RESTful风格的接口,可以实现跨平台、跨语言的数据交互。在使用WebAPI时,可以使用SQLSugar作为ORM(对象关系映射)框架,与数据库进行交互。 SQLSugar是一个轻量级的ORM框架,支持多种数据库,包括MySQL、SQL Server、Oracle等。它提供了简单易用的接口和丰富的功能,可以大大提高开发人员的生产效率。在使用SQLSugar时,我们可以通过编写实体类来映射数据库表,通过调用SQLSugar提供的方法来进行数据库操作,例如增删改查、连接查询等。同时,SQLSugar还支持事务操作,可以保证数据的一致性和完整性。 .NET 6.0是微软发布的新一代的开发框架,它提供了丰富的功能和强大的性能优化,可以用于构建高效稳定的Web应用和服务。使用.NET 6.0开发WebAPI,我们可以充分利用其提供的新特性和优化的性能,在提高开发效率的同时,确保应用程序的高可用性和可扩展性。 综上所述,WebAPI、SQLSugar和.NET 6.0是三种不同的技术,它们可以结合使用,实现高效稳定的Web服务。通过使用SQLSugar作为ORM框架,我们可以方便地进行数据库操作,而使用.NET 6.0开发WebAPI,则可利用其丰富的功能和性能优势,轻松构建高效的Web服务。
相关问题

netcore6.0 webapi+jwt+vue3授权

Netcore6.0是微软推出的全新版本的开发框架,它提供了强大且灵活的功能,用于构建Web应用程序和API。Web API是Netcore6.0中的一项重要功能,它允许我们构建基于HTTP协议的API,并通过JSON格式进行数据交换。 JWT(JSON Web Token)是一种用于在网络应用间传递信息的安全方法。在Netcore6.0中,我们可以使用JWT来实现Web API的授权功能。JWT由三部分组成:头部、载荷和签名。头部包含了令牌的类型和算法,载荷包含了我们想要传递的数据,签名通过使用密钥进行加密来验证令牌的合法性。 在Netcore6.0中,我们可以使用Microsoft提供的Microsoft.AspNetCore.Authentication.JwtBearer包来简单地实现JWT的授权功能。首先,我们需要在Startup.cs文件的ConfigureServices方法中配置JWT的身份验证服务,并指定密钥、颁发者、验证等参数。然后,在Configure方法中启用身份验证中间件和JWT授权中间件。 在Vue3中,我们可以使用Axios库来发送HTTP请求并附带JWT令牌进行授权。Vue3是一种流行的JavaScript框架,用于构建现代化的用户界面。通过Axios,我们可以将JWT令牌添加到请求的Authorization头部中,并在后端接收到请求时进行验证。 为了实现Vue3与Netcore6.0的JWT授权,我们首先需要在Vue3项目中安装Axios库,并配置请求拦截器,在每个请求发送前将JWT令牌添加到请求头中。后端接收到带有JWT令牌的请求后,使用相同的密钥和算法进行解密并验证令牌的合法性。 综上所述,Netcore6.0的Web API和Vue3的JWT授权组合,可以实现安全可靠的API授权。通过合理的配置和使用,我们可以保护API免受未经授权的访问,并确保只有经过身份验证的用户才能访问敏感数据或执行特定操作。

libstdc++.so.6.0.25下载

libstdc++.so.6.0.25是一个用于C++编程语言的动态链接库,是GNU GCC(GNU Compiler Collection)软件包的一部分。 要下载libstdc++.so.6.0.25,可以按照以下步骤进行操作: 1. 打开您喜欢使用的Web浏览器,例如Chrome、Firefox等。 2. 在搜索引擎中输入"libstdc++.so.6.0.25下载",点击搜索按钮。 3. 在搜索结果中,您可能会找到一些可靠的软件下载网站,如SourceForge、GitHub等。选择一个您信任的网站并打开该网站。 4. 在网站的搜索栏中输入"libstdc++.so.6.0.25",然后按下回车键进行搜索。 5. 网站的搜索结果页面会显示关于libstdc++.so.6.0.25的相关信息和下载链接。请注意,确保您选择的下载链接是与您的操作系统和架构相对应的版本。 6. 点击下载链接,然后保存下载的文件到您选择的目录中。 7. 下载完成后,您将会获得一个文件名为libstdc++.so.6.0.25的库文件。 请注意,下载的库文件仅仅是库的二进制文件,并不包含C++编程所需的头文件等其他依赖文件。因此,在使用该库文件进行编译和链接时,您可能还需要安装其他必要的软件包和依赖项,以确保您的编程环境具备完整的功能。 希望这个回答能够帮助您下载libstdc++.so.6.0.25,并顺利进行C++程序的编写与开发。如果您有任何进一步的问题,请随时追加。

相关推荐

webapi sqlsugar demo 是一个基于 ASP.NET WebAPI 和 SqlSugar ORM 框架的演示项目。 SqlSugar 是一个轻量级、高性能的 ORM 框架,可以简化开发人员对数据库的操作。它支持多种数据库,如 SQL Server、MySql、Oracle、SQLite 等,并提供了丰富的 SQL 查询操作、实体 CRUD 操作的 API,以及数据库事务的支持。 webapi sqlsugar demo 建立了一个基于 WebAPI 的 RESTful API 服务,通过 SqlSugar ORM 框架对数据库进行操作。它的主要目的是展示如何在 WebAPI 项目中快速集成 SqlSugar,并实现简单的数据增删改查功能。 在这个 demo 中,首先在项目中引用了 SqlSugar 的 NuGet 包,并配置了数据库连接字符串。然后使用 SqlSugar 的 API 创建数据库表对应的实体类,定义了表的字段和关联关系。 接下来,通过 WebAPI 的控制器,使用 SqlSugar 的 API 实现了一些基本的数据库操作接口,如查询全部数据、根据 ID 查询单条数据、新增数据、修改数据和删除数据等。 在运行这个 demo 时,可以使用任何支持 RESTful API 的工具(如 Postman)进行测试。可以通过 GET 请求获取全部数据或单条数据,通过 POST 请求新增数据,通过 PUT 请求修改数据,通过 DELETE 请求删除数据。 这个 demo 只是一个简单的示例,可以作为初学者了解 SqlSugar ORM 框架和 WebAPI 开发的起点。它提供了一个基本的框架和思路,供开发人员根据实际需求进行扩展和优化。
.NET Framework是微软公司推出的一个跨平台的软件开发框架。它提供了一个能够快速构建各种类型的应用程序的基础,包括Web应用、桌面应用和移动应用等。WebAPI是.NET Framework中的一部分,它是一种用于构建Web服务的技术,可以让开发人员以面向资源的方式来创建和访问Web API。 SQLSugar是.NET Framework中的一个ORM框架,它允许开发人员通过编写简单的代码来执行SQL查询和操作数据库。 SQLSugar提供了许多强大的功能,比如简化的查询语法、多表查询、分页查询和事务支持等。 使用.NET Framework WebAPI和SQLSugar可以构建强大的Web应用程序。首先,开发者可以使用WebAPI来创建RESTful的Web服务,提供一个可靠的数据接口给前端应用或其他后端应用程序使用。开发者可以使用标准的HTTP方法来执行各种操作,比如GET、POST、PUT和DELETE等。 在WebAPI中,我们可以使用SQLSugar来处理数据库操作。通过SQLSugar,开发者可以很方便地进行数据库的连接和查询。SQLSugar提供了简洁易用的API,使得开发者可以轻松地完成各种查询和更新操作。开发者可以使用LINQ语法来编写查询语句,也可以使用原生的SQL语句。SQLSugar还支持事务处理,可以确保数据库操作的一致性和完整性。 总之,使用.NET Framework WebAPI和SQLSugar可以帮助开发者快速构建可靠、高效的Web应用程序。WebAPI提供了一个强大的接口,可以方便地与前端应用或其他后端应用进行数据交互。SQLSugar则提供了一个简单、灵活的数据库操作方式,使得开发者可以轻松地处理数据库查询和更新。通过使用这些技术,开发者可以加快应用程序的开发速度,并提高应用程序的性能和可维护性。
要配置SQLSugar连接池连接数据库,可以按照以下步骤操作: 1. 在.NET Core Web Api项目中安装SQLSugar NuGet包。 2. 在appsettings.json文件中添加数据库连接字符串,例如: "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=mydatabase;User Id=myuser;Password=mypassword;" } 3. 在Startup.cs文件中添加SQLSugar连接池服务配置: csharp using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using SqlSugar; public class Startup { private readonly IConfiguration _config; public Startup(IConfiguration config) { _config = config; } public void ConfigureServices(IServiceCollection services) { // 配置SQLSugar连接池 services.AddScoped<ISqlSugarClient>(provider => { var connectionString = _config.GetConnectionString("DefaultConnection"); var db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = connectionString, DbType = DbType.MySql, // 数据库类型 IsAutoCloseConnection = true, // 自动释放连接 InitKeyType = InitKeyType.Attribute // 实体定义方式 }); return db; }); // 其他服务配置... } } 4. 在控制器中注入ISqlSugarClient服务,并使用它来访问数据库。 csharp using Microsoft.AspNetCore.Mvc; using SqlSugar; [ApiController] [Route("[controller]")] public class MyController : ControllerBase { private readonly ISqlSugarClient _db; public MyController(ISqlSugarClient db) { _db = db; } [HttpGet] public IActionResult Get() { var list = _db.Queryable<MyEntity>().ToList(); return Ok(list); } } 这样就可以使用SQLSugar连接池来连接数据库了。
在使用 WebAPI 和 EF 框架时,如果返回的 JSON 数据中包含日期属性,其格式往往会带有 T 字符。这是因为 .NET 中默认的日期格式是 ISO 8601 标准格式,它包含一个 T 字符,用于分隔日期和时间。 要解决这个问题,有两种方法: 方法一:修改日期格式 可以在 WebAPI 的配置中设置全局的日期格式,从而修改返回的 JSON 数据中日期的格式。具体操作如下: 1.在 Global.asax.cs 文件中的 Application_Start 方法中添加以下代码: csharp var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; 2.在上述代码中,我们将日期格式设置为 "yyyy-MM-dd HH:mm:ss",这样返回的 JSON 数据中日期的格式就不再带有 T 字符。 方法二:使用自定义 JsonConverter 如果我们只想针对某个特定的实体类或属性,来修改返回的 JSON 数据中日期的格式,可以使用自定义的 JsonConverter。具体操作如下: 1.创建一个继承自 JsonConverter 的类,重写 ReadJson 和 WriteJson 方法,实现对日期格式的转换。 csharp public class DateTimeConverter : JsonConverter { public override bool CanConvert(Type objectType) { return objectType == typeof(DateTime); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.Value == null) { return null; } return DateTime.Parse(reader.Value.ToString()); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteValue(((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss")); } } 2.在实体类或属性上添加 [JsonConverter] 属性,指定使用自定义的 JsonConverter。 csharp public class User { public int Id { get; set; } public string Name { get; set; } [JsonConverter(typeof(DateTimeConverter))] public DateTime RegisterTime { get; set; } } 这样返回的 JSON 数据中,RegisterTime 属性的日期格式就不再带有 T 字符了。
VS2017是微软公司开发的一款集成开发环境(IDE),用于开发各种类型的软件应用程序。它提供了一套完整的工具和功能,方便开发人员进行代码编写、调试、测试和部署等工作。 VS2017的优势主要体现在以下几个方面: 首先,VS2017支持多种编程语言,包括C、C++、C#、Python等,使开发人员可以根据项目需求选择最适合的语言进行开发。同时,VS2017还具备强大的代码编辑功能,如智能代码提示、语法检查等,能够帮助开发人员提高代码质量和开发效率。 其次,VS2017提供了丰富的调试工具,能够帮助开发人员快速定位和修复程序中的bug。开发人员可以通过断点调试、查看变量值、单步执行等功能,深入了解程序运行过程,从而加快 bug 的修复进程。 此外,VS2017还支持团队协作开发,提供了代码版本控制工具(如Git)、团队项目管理功能等。开发人员可以方便地与其他团队成员进行代码的共享与合作,提高开发效率和团队协作效果。 最后,VS2017还通过集成了大量的第三方扩展,扩展了其功能和应用范围。开发人员可以根据自己的需要,选择并安装适合自己项目的扩展,满足特定的开发需求。 综上所述,VS2017作为一款强大的集成开发环境,具备多种语言支持、丰富的调试工具、团队协作功能和扩展性等优势,可以帮助开发人员更加高效地进行软件开发工作。
以下是一个 C# WebAPI 中实现 Header 验证的示例代码: csharp public class HeaderAuthenticationFilter : IAuthenticationFilter { private readonly string apiKey = "your_api_key_here"; public bool AllowMultiple => false; public async Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken) { // 获取请求头的 Authorization 字段 var authHeader = context.Request.Headers.Authorization; // 如果 Authorization 字段不存在或不是 Bearer 形式的 Token,则返回未授权的错误 if (authHeader == null || !authHeader.Scheme.Equals("Bearer", StringComparison.OrdinalIgnoreCase)) { context.ErrorResult = new AuthenticationFailureResult("Unauthorized", context.Request); return; } // 获取 Token var token = authHeader.Parameter; // 验证 Token 是否正确 if (string.IsNullOrWhiteSpace(token) || !token.Equals(apiKey)) { context.ErrorResult = new AuthenticationFailureResult("Unauthorized", context.Request); return; } // 设置用户身份验证信息 var identity = new GenericIdentity("user"); context.Principal = new GenericPrincipal(identity, new string[] { }); } public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken) { return Task.FromResult(0); } } public class AuthenticationFailureResult : IHttpActionResult { public string ReasonPhrase { get; private set; } public HttpRequestMessage Request { get; private set; } public AuthenticationFailureResult(string reasonPhrase, HttpRequestMessage request) { ReasonPhrase = reasonPhrase; Request = request; } public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { var response = new HttpResponseMessage(HttpStatusCode.Unauthorized); response.RequestMessage = Request; response.ReasonPhrase = ReasonPhrase; return Task.FromResult(response); } } 在上述代码中,我们创建了一个名为 HeaderAuthenticationFilter 的类,该类实现了 IAuthenticationFilter 接口,用于在 WebAPI 的管道中进行身份验证。我们在 AuthenticateAsync 方法中进行身份验证,如果验证失败,则设置 ErrorResult 属性返回未授权的错误。如果验证成功,则设置 Principal 属性为一个包含用户信息的 IPrincipal 对象。最后,我们创建了一个名为 AuthenticationFailureResult 的类,该类实现了 IHttpActionResult 接口,用于返回错误响应。
要在.NET Core Web Api中配置SQLSugar连接池,您可以按照以下步骤进行操作: 1. 在您的.NET Core Web Api项目中安装SQLSugar和MySql.Data包。 2. 在appsettings.json文件中添加MySQL数据库连接字符串,如下所示: json { "ConnectionStrings": { "DefaultConnection": "server=localhost;database=your_database;user=root;password=your_password;pooling=true;" } } 3. 创建一个名为SugarDao.cs的文件,并在其中添加以下代码: csharp using Microsoft.Extensions.Configuration; using MySql.Data.MySqlClient; using SqlSugar; using System; namespace YourNamespace { public class SugarDao { private readonly IConfiguration _configuration; private readonly MySqlConnection _connection; public SugarDao(IConfiguration configuration) { _configuration = configuration; var connectionString = _configuration.GetConnectionString("DefaultConnection"); _connection = new MySqlConnection(connectionString); } public SqlSugarClient GetInstance() { var db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = _configuration.GetConnectionString("DefaultConnection"), DbType = DbType.MySql, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute, ConfigureExternalServices = new ConfigureExternalServices() { DataInfoCacheService = new HttpRuntimeCache() }, MoreSettings = new ConnMoreSettings() { IsAutoRemoveDataCache = true }, AopEvents = new AopEvents { OnLogExecuting = (sql, pars) => { Console.WriteLine(sql + "\r\n" + _connection.CreateCommand().AppendParameters(pars).CommandText); Console.WriteLine(); } } }); db.Ado.ExecuteCommand("SET NAMES utf8mb4;"); return db; } } } 4. 在Startup.cs文件中的ConfigureServices方法中添加以下代码: csharp services.AddSingleton<SugarDao>(); services.AddScoped<ISqlSugarClient>(i => i.GetService<SugarDao>().GetInstance()); 5. 现在您可以在您的控制器中注入ISqlSugarClient,如下所示: csharp using Microsoft.AspNetCore.Mvc; using SqlSugar; namespace YourNamespace.Controllers { [ApiController] [Route("[controller]")] public class YourController : ControllerBase { private readonly ISqlSugarClient _db; public YourController(ISqlSugarClient db) { _db = db; } [HttpGet] public IActionResult Get() { var data = _db.Queryable<YourModel>().ToList(); return Ok(data); } } } 这样,您就完成了在.NET Core Web Api中配置SQLSugar连接池的操作。
首先,需要在项目中安装 SqlSugar 包。可以使用 NuGet 包管理器或者命令行安装。 接下来,在 Startup.cs 中的 ConfigureServices 方法中,添加以下代码: csharp services.AddScoped<ISqlSugarClient>((provider) => { var db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = "YourConnectionString", DbType = DbType.MySql, // 指定数据库类型为 MySQL InitKeyType = InitKeyType.Attribute // 指定实体类的主键类型为属性 }); return db; }); 其中,YourConnectionString 为你的 MySQL 数据库连接字符串。 然后,在需要使用 SqlSugar 的类中,可以通过构造函数注入 ISqlSugarClient 对象,例如: csharp public class MyService { private readonly ISqlSugarClient _db; public MyService(ISqlSugarClient db) { _db = db; } // ... } 接下来,可以在需要使用定时器的地方,注入 ISqlSugarClient 对象,并使用 SqlSugar 的查询语句操作数据库。例如: csharp public class MyTimerService : IHostedService, IDisposable { private readonly ISqlSugarClient _db; private Timer _timer; public MyTimerService(ISqlSugarClient db) { _db = db; } public Task StartAsync(CancellationToken cancellationToken) { _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5)); return Task.CompletedTask; } private void DoWork(object state) { var list = _db.Queryable<MyEntity>().ToList(); // 查询 MyEntity 表中的数据 // 处理数据 ... } // ... } 以上代码中,MyEntity 可以是实体类,表示数据库中的一张表。可以通过 SqlSugar 的 Queryable 方法进行查询。同时,DoWork 方法会在定时器触发时执行。 这样就完成了在 .NET Core Web Api 中配置 SqlSugar 连接 MySQL 数据库并在多个定时器中调用的过程。
以下是使用.NET 6 Web API进行JWT认证的示例代码: 1. 首先,安装所需的NuGet包: dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer dotnet add package System.IdentityModel.Tokens.Jwt 2. 在Program.cs文件中进行配置: csharp using Microsoft.IdentityModel.Tokens; var builder = WebApplication.CreateBuilder(args); // 添加JWT认证服务 builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "your_issuer", // 发行者 ValidAudience = "your_audience", // 受众 IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key")) // 密钥 }; }); builder.Services.AddControllers(); var app = builder.Build(); app.UseAuthentication(); app.MapControllers(); app.Run(); 3. 创建一个控制器来处理需要认证的请求: csharp using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class MyController : ControllerBase { [Authorize] [HttpGet("protected")] public IActionResult Protected() { // 受保护的路由,只有经过认证的用户才能访问 return Ok("You have accessed the protected route."); } // 其他需要认证的方法和路由 } 在上述代码中,我们使用[Authorize]特性来标记需要进行认证的方法或路由。只有经过认证的用户才能访问受保护的路由。认证是通过在请求的Authorization标头中传递JWT令牌来实现的。 确保将示例代码中的"your_issuer"、"your_audience"和"your_secret_key"替换为适合你的实际情况的值。这些值应与生成JWT令牌时使用的值相匹配。

最新推荐

金蝶云 WebAPI接口说明书_V4.0.docx

金蝶云星空WebAPI接口文档4.0版本 用于金蝶Cloud产品的接口开发调用 cloud和k3 wise还是有很大区别的,希望能帮到大家

ASP.NET(C#) Web Api通过文件流下载文件的实例

主要介绍了ASP.NET(C#) Web Api通过文件流下载文件的方法,提供源码下载,需要的朋友可以参考下。

C#进阶系列 WebApi身份认证解决方案推荐:Basic基础认证

下面小编就为大家带来一篇C#进阶系列 WebApi身份认证解决方案推荐:Basic基础认证。小编觉得挺不错的,现在分享给大家。给大家一个参考。一起跟随小编过来看看吧

C# WebApi Get请求方式传递实体参数的方法示例

主要给大家介绍了关于C# WebApi Get请求方式传递实体参数的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

详解C# WebApi 接口测试工具:WebApiTestClient

主要介绍了详解C# WebApi 接口测试工具:WebApiTestClient,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

网络技术-综合布线-河南农村宽带客户细分的研究.pdf

网络技术-综合布线-河南农村宽带客户细分的研究.pdf

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire

理解Socket编程的基础概念

# 1. 介绍Socket编程的基本概念 ## 1.1 什么是Socket编程 Socket编程是一种在网络编程中使用的抽象概念,它允许应用程序通过网络进行通信。通过Socket编程,可以实现客户端与服务器端之间的数据交换和通信。 ## 1.2 Socket编程的应用范围 Socket编程广泛应用于网络通信领域,包括但不限于Web服务、即时通讯、网络游戏、远程控制等。 ## 1.3 Socket编程的基本原理 Socket编程基于网络套接字(socket)的概念,通过套接字建立连接、传输数据和关闭连接来实现通信。在Socket编程中,使用不同的协议(如TCP、UDP)来实现数据传输和通信

c语言桌子上有几堆糖果,每堆糖果的数量记录在一个整型数组 nums 中。我们可以每次选择任意一堆,拿走其中的一颗或者两颗糖果,求拿完所有糖果的最少次数。

好的,以下是 C 语言的实现代码: ```c #include <stdio.h> #include <stdlib.h> int min(int a, int b) { return a < b ? a : b; } int minSteps(int* nums, int numsSize) { int dp[numsSize + 1]; dp[0] = 0; dp[1] = 1; for (int i = 2; i <= numsSize; i++) { dp[i] = min(dp[i-1] + 1, dp[i-2] + 1)

供应链管理制度(全).ppt

供应链管理制度