使用 ASP.NET Core MVC 创建 Web API(二)
使用 ASP.NET Core MVC 创建 Web API
使用 ASP.NET Core MVC 创建 Web API(一)
六、添加数据库上下文
数据库上下文是使用Entity Framework Core功能的主类。 此类由 Microsoft.EntityFrameworkCore.DbContext
类派生而来。
1) 在Visual Studio 2017的“解决方案资源管理器”中,右键单击“Models”文件夹,然后选择“添加” > “类”。 将类命名为 BookContext,然后单击“添加”。
2) 在Visual Studio 2017的“解决方案资源管理器”中使用鼠标双击打开BookContext.cs文件,并输入以下代码:
using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace BookApi.Models { public class BookContext: DbContext { public BookContext(DbContextOptions<BookContext> options) : base(options) { } public DbSet<Book> Book { get; set; } } }
七、注册数据库上下文
在 ASP.NET Core 中,服务(如数据库上下文)必须向依赖关系注入 (DI) 容器进行注册。该容器向控制器提供服务。
在Visual Studio 2017中的“解决方案资源管理器”中找到 Startup.cs文件,双击打开之后,添加将数据库上下文注入到DI容器中的代码。代码如下。
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using BookApi.Models; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; namespace BookApi { 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.AddDbContext<BookContext>(options => options.UseSqlServer(Configuration.GetConnectionString("BookContext"))); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMvc(); } } }
八、添加数据库连接
在Visual Studio 2017中的“解决方案资源管理器”中找到 appsettings.json文件,双击打开,然后添加数据库连接字符串。文件中的配置代码如下。
{ "Logging": { "LogLevel": { "Default": "Warning" } }, "ConnectionStrings": { "BookContext": "Server=.\\sqlexpress;Database=CustomDB;Trusted_Connection=True;MultipleActiveResultSets=true" }, "AllowedHosts": "*" }
九、 添加控制器
1) 在Visual Studio 2017中的“解决方案资源管理器”中右键单击 Controllers 文件夹。在弹出菜单中选择 添加 > 新建项。如下图。
2) 在“添加新项-BookApi”对话框中,选择“Web”—>“API 控制器类”模板,并在“名称”输入框中输入 BookController,然后选择“添加”按钮。如下图。
3) 在Visual Studio 2017中打开BookController.cs文件中添加以下代码:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using BookApi.Models; using Microsoft.AspNetCore.Mvc; // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 namespace BookApi.Controllers { [Route("api/[controller]")] [ApiController] public class BookController : Controller { private readonly BookContext _context; public BookController(BookContext context) { _context = context; if (_context.Book.Count() == 0) { context.Book.AddRange( new Book { Name = "Python编程 从入门到实践", ReleaseDate = DateTime.Parse("2018-1-12"), Author = "埃里克·马瑟斯", Price = 75.99M, Publishing = "机械出版社" }, new Book { Name = "Java编程的逻辑", ReleaseDate = DateTime.Parse("2018-1-13"), Author = "马俊昌", Price = 48.50M, Publishing = "机械出版社" }, new Book { Name = "统计思维:大数据时代瞬间洞察因果的关键技能", ReleaseDate = DateTime.Parse("2017-12-23"), Author = "西内启", Price = 39.00M, Publishing = "清华出版社" }, new Book { Name = "微信营销", ReleaseDate = DateTime.Parse("2018-01-05"), Author = "徐林海", Price = 36.90M, Publishing = "清华出版社" }, new Book { Name = "Java 8实战", ReleaseDate = DateTime.Parse("2016-04-05"), Author = "厄马", Price = 65.60M, Publishing = "科技出版社" } ); _context.SaveChanges(); } } } }
对于上面的代码的说明:
1) 定义了没有方法的 API 控制器类。
2) 使用 [ApiController]
属性修饰类。 此属性指示控制器响应 Web API 请求。
从 ASP.NET Core 2.1 开始,使用 [ApiController]
特性修饰控制器类时,将启用操作参数绑定源推理。复杂类型参数通过请求正文自动绑定。 因此,不会使用 [FromBody] 特性对前面操作中的 Book
参数进行显示批注。在 ASP.NET Core 2.2 或更高版本中,可将 [ApiController] 特性应用于程序集。 以这种方式进行注释,会将 web API 行为应用到程序集中的所有控制器。 请注意,无法针对单个控制器执行选择退出操作。
[ApiController] 特性通常结合 Controller 来为控制器启用特定于 REST 行为。 通过 Controllere 可使用NotFound 和 File 等方法。
另一种方法是创建使用 [ApiController] 特性进行批注的自定义基本控制器类:
[ApiController] public class MyBaseController { }
3) 使用 DI 将数据库上下文 (BookContext
) 注入到控制器中。 数据库上下文将在控制器中的每个 CRUD 方法中使用。
4) 如果数据库为空,则将几条书籍信息数据添加到数据库。 此代码位于构造函数中,因此在每次出现新 HTTP 请求时运行。 如果删除所有项,则构造函数会在下次调用 API 方法时再次创建。 因此删除可能看上去不起作用,不过实际上确实有效。
相关文章
- Redis-技术专区-帮从底层彻底吃透RDB技术原理
- Mybatis-技术专区-如何清晰的解决出现「多对一模型」和「一对多模型」的问题
- 🏆【JVM技术专区】「难点-核心-遗漏」TLAB内存分配+锁的碰撞(技术串烧)!
- 🏆【Alibaba微服务技术系列】「Dubbo3.0技术专题」回顾Dubbo2.x的技术原理和功能实现及源码分析(温故而知新)
- 【微服务技术专题】Netflix动态化配置服务-微服务配置组件变色龙Archaius
- 🏆【JVM技术专区】「虚拟机专题」JDK/JVM的新储君—GraalVM和Quarkus
- Alibaba-技术专区-RocketMQ 延迟消息实现原理和源码分析
- 【SpringBoot技术专题】「JWT技术专区」SpringSecurity整合JWT授权和认证实现
- Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(目录)
- Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(序章)
- SpringBoot-技术专区-用正确的姿势如何用外置tomcat配置及运行(Tomcat优化分析)
- 【SpringCloud技术专题】「原生态Fegin」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(下)
- 【SpringCloud技术专题】「原生态Fegin」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(中)
- 【SpringCloud技术专题】「原生态Fegin」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(上)
- 🏆(不要错过!)【CI/CD技术专题】「Jenkins实战系列」(4)jenkins+pipeline构建自动化部署
- 🏆(不要错过!)【CI/CD技术专题】「Jenkins实战系列」(3)Jenkinsfile+DockerFile实现自动部署
- 【Maven实战技巧】「插件使用专题」Maven-Assembly插件实现自定义打包
- [书单]
- MySQL-技术专题-innodb存储引擎
- 浅谈NIO和Epoll的实现原理