.netCore WebApi小Demo
通过自己学习,自己的理解,总结笔记。创建 .net Core2.1, webApi项目TodoApi
项目组成如图:
创建Models类。
1、创建student类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace TodoApi.Models
{
public class Student
{
public long Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Dept { get; set; }
}
}
2、创建基类控制器,继承自ControllerBase,如果有多个控制器需要创建基类控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace TodoApi.Controllers
{
[ApiController]
public class MyControllerBaseController : ControllerBase
{
}
}
3、创建StudentController控制器,继承自基类控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;
namespace TodoApi.Controllers
{
[Route("api/[controller]")]
//[ApiController]
public class StudentController : MyControllerBaseController
{
private readonly TodoContext _context;
public StudentController(TodoContext context)
{
_context = context;
if (_context.Students.Count() == 0)
{
_context.Students.Add(new Student
{
Name = "张三",
Age = 20,
Dept = "计算机科学与技术"
});
_context.SaveChanges();
}
}
// GET: api/Todo
[HttpGet]
public async Task<ActionResult<IEnumerable<Student>>> GetTodoItems()
{
return await _context.Students.ToListAsync();
}
[HttpGet("{id}")]
public async Task<ActionResult<Student>> GetStudent(long id)
{
var todoItem = await _context.Students.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return todoItem;
}
// POST: api/Todo
[HttpPost]
public async Task<ActionResult<Student>> PostStudent(Student item)
{
_context.Students.Add(item);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetStudent), new { id = item.Id }, item);
}
// PUT: api/Todo/5
[HttpPut("{id}")]
public async Task<IActionResult> PutStudent(long id, Student item)
{
if (id != item.Id)
{
return BadRequest();
}
_context.Entry(item).State = EntityState.Modified;
await _context.SaveChangesAsync();
return NoContent();
}
}
}
4、创建TodoContext类,
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace TodoApi.Models
{
public class TodoContext : DbContext
{
public DbSet<TodoItem> TodoItems { get; set; }
public DbSet<Student> Students { get; set; }
public TodoContext(DbContextOptions<TodoContext> options)
: base(options)
{
}
}
}
5、配置服务
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using TodoApi.Models;
namespace TodoApi
{
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<TodoContext>(opt => opt.UseInMemoryDatabase("TodoLists"));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
// 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();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
}
}
6、程序入口Program
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace TodoApi
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
}
Postman调用