使用 ASP.NET Core 创建 Web API
这是一篇图文基础教程:适合新手练习。开发环境VS2019+.net core 3.0需要安装core 3.0检验是否安装core 3.0 ----cmd 命令dotnet --info运行vs2019创建新项目---选择ASP.NET Core Web应用程序配置项目选择项目类型--API点击创建---等一会就会有模版了运行这个项目...
·
这是一篇图文基础教程:适合新手练习。
开发环境VS2019+.net core 3.0
需要安装core 3.0
检验是否安装core 3.0 ----cmd 命令dotnet --info
运行vs2019
创建新项目---选择ASP.NET Core Web应用程序
配置项目
选择项目类型--API
点击创建---等一会就会有模版了
运行这个项目,会在浏览器上显示一个json数据。这个默认生成的数据。
然后下一步:
创建Models文件夹:
然后右键Models文件夹,添加一个类文件:TodoItem
namespace WebTest.Models
{
public class TodoItem
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsBlack { get; set; }
}
}
下一步需要引用nuget扩展包
连续步骤 添加:Microsoft.EntityFrameworkCore.SqlServer
和 Microsoft.EntityFrameworkCore.InMemory
安装完之后,右键Models文件夹添加TodoContext 数据库上下文类
using Microsoft.EntityFrameworkCore;
namespace WebTest.Models
{
public class TodoContext : DbContext
{
public TodoContext(DbContextOptions<TodoContext> options) : base(options)
{ }
public DbSet<TodoItem> TodoItems { get; set; }
}
}
上下文添加完之后需要Startup.cs修改一下:向依赖关系注入 (DI) 容器进行注册
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.EntityFrameworkCore;
using WebTest.Models;
namespace WebTest
{
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("TodoList"));
services.AddControllers();
}
// 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.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
下一步,添加控制器:右键Controllers文件夹,
继续:
继续:选择对应的项:
控制器代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using WebTest.Models;
namespace WebTest.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TodoItemsController : ControllerBase
{
private readonly TodoContext _context;
public TodoItemsController(TodoContext context)
{
_context = context;
}
// GET: api/TodoItems
[HttpGet]
public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems()
{
return await _context.TodoItems.ToListAsync();
}
// GET: api/TodoItems/5
[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(int id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return todoItem;
}
// PUT: api/TodoItems/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see https://aka.ms/RazorPagesCRUD.
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(int id, TodoItem todoItem)
{
if (id != todoItem.Id)
{
return BadRequest();
}
_context.Entry(todoItem).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!TodoItemExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
// POST: api/TodoItems
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see https://aka.ms/RazorPagesCRUD.
[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem)
{
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
//return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
//nameof是为了调用方法时不采用硬编码
return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem);
}
// DELETE: api/TodoItems/5
[HttpDelete("{id}")]
public async Task<ActionResult<TodoItem>> DeleteTodoItem(int id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
_context.TodoItems.Remove(todoItem);
await _context.SaveChangesAsync();
return todoItem;
}
private bool TodoItemExists(int id)
{
return _context.TodoItems.Any(e => e.Id == id);
}
}
}
这样之后,就可以使用Postman来测试:
浏览器运行可以看到结果。使用postman的时候,程序需要运行着。
更多推荐
已为社区贡献1条内容
所有评论(0)