C# 如何在RESTful web应用程序中添加数据库?
我是C# 如何在RESTful web应用程序中添加数据库?,c#,asp.net,C#,Asp.net,我是asp.net的新手,正在努力学习。所以我创建了一个项目,其中的代码来自在线教程(),包含以下类 控制器: namespace WebApiSample.Controllers { [Route("api/[controller]")] [ApiController] public class TodoController : ControllerBase { private readonly ToDoContext _context;
asp.net
的新手,正在努力学习。所以我创建了一个项目,其中的代码来自在线教程(),包含以下类
控制器:
namespace WebApiSample.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TodoController : ControllerBase
{
private readonly ToDoContext _context;
public TodoController(ToDoContext context)
{
_context = context;
if (_context.TodoItems.Count() == 0)
{
// Create a new TodoItem if collection is empty,
// which means you can't delete all TodoItems.
_context.TodoItems.Add(new ToDoItem { Name = "Item1" });
_context.SaveChanges();
}
}
// GET: api/Todo
[HttpGet]
public async Task<ActionResult<IEnumerable<ToDoItem>>> GetTodoItems()
{
return await _context.TodoItems.ToListAsync();
}
// GET: api/Todo/5
[HttpGet("{id}")]
public async Task<ActionResult<ToDoItem>> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return todoItem;
}
// POST: api/Todo
[HttpPost]
public async Task<ActionResult<ToDoItem>> PostTodoItem(ToDoItem todoItem)
{
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
}
// PUT: api/Todo/5
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, ToDoItem todoItem)
{
if (id != todoItem.Id)
{
return BadRequest();
}
_context.Entry(todoItem).State = EntityState.Modified;
await _context.SaveChangesAsync();
return NoContent();
}
// DELETE: api/Todo/5
[HttpDelete("{id}")]
public async Task<ActionResult<ToDoItem>> DeleteTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
_context.TodoItems.Remove(todoItem);
await _context.SaveChangesAsync();
return todoItem;
}
}
}
namespace WebApiSample.Models
{
public class ToDoItem
{
public long Id { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
}
}
namespace WebApiSample.Models
{
public class ToDoContext : DbContext
{
public ToDoContext(DbContextOptions<ToDoContext> options)
: base(options)
{
}
public DbSet<ToDoItem> TodoItems { get; set; }
}
}
namespace WebApiSample
{
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.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();
}
else
{
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
}
}
名称空间WebApiSample.Controllers
{
[路由(“api/[控制器]”)]
[ApiController]
公共类TodoController:ControllerBase
{
私有只读ToDoContext\u上下文;
公共TodoController(ToDoContext上下文)
{
_上下文=上下文;
if(_context.TodoItems.Count()==0)
{
//如果集合为空,则创建新的TodoItem,
//这意味着您不能删除所有ToDoItem。
_Add(新的ToDoItem{Name=“Item1”});
_SaveChanges();
}
}
//获取:api/Todo
[HttpGet]
公共异步任务GetTodoItems()
{
返回wait_context.TodoItems.toListSync();
}
//GET:api/Todo/5
[HttpGet(“{id}”)]
公共异步任务GetTodoItem(长id)
{
var todoItem=wait _context.TodoItems.FindAsync(id);
if(todoItem==null)
{
返回NotFound();
}
返回doitem;
}
//张贴:api/Todo
[HttpPost]
公共异步任务PostTodoItem(ToDoItem ToDoItem)
{
_context.TodoItems.Add(todoItem);
wait_context.SaveChangesAsync();
返回CreateDataAction(“GetTodoItem”,new{id=todoItem.id},todoItem);
}
//PUT:api/Todo/5
[HttpPut(“{id}”)]
公共异步任务PuttoItem(长id,ToDoItem ToDoItem)
{
if(id!=todoItem.id)
{
返回请求();
}
_context.Entry(todoItem).State=EntityState.Modified;
wait_context.SaveChangesAsync();
返回NoContent();
}
//删除:api/Todo/5
[HttpDelete(“{id}”)]
公共异步任务DeleteTodoItem(长id)
{
var todoItem=wait _context.TodoItems.FindAsync(id);
if(todoItem==null)
{
返回NotFound();
}
_context.TodoItems.Remove(todoItem);
wait_context.SaveChangesAsync();
返回doitem;
}
}
}
型号:
namespace WebApiSample.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TodoController : ControllerBase
{
private readonly ToDoContext _context;
public TodoController(ToDoContext context)
{
_context = context;
if (_context.TodoItems.Count() == 0)
{
// Create a new TodoItem if collection is empty,
// which means you can't delete all TodoItems.
_context.TodoItems.Add(new ToDoItem { Name = "Item1" });
_context.SaveChanges();
}
}
// GET: api/Todo
[HttpGet]
public async Task<ActionResult<IEnumerable<ToDoItem>>> GetTodoItems()
{
return await _context.TodoItems.ToListAsync();
}
// GET: api/Todo/5
[HttpGet("{id}")]
public async Task<ActionResult<ToDoItem>> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return todoItem;
}
// POST: api/Todo
[HttpPost]
public async Task<ActionResult<ToDoItem>> PostTodoItem(ToDoItem todoItem)
{
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
}
// PUT: api/Todo/5
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, ToDoItem todoItem)
{
if (id != todoItem.Id)
{
return BadRequest();
}
_context.Entry(todoItem).State = EntityState.Modified;
await _context.SaveChangesAsync();
return NoContent();
}
// DELETE: api/Todo/5
[HttpDelete("{id}")]
public async Task<ActionResult<ToDoItem>> DeleteTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
_context.TodoItems.Remove(todoItem);
await _context.SaveChangesAsync();
return todoItem;
}
}
}
namespace WebApiSample.Models
{
public class ToDoItem
{
public long Id { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
}
}
namespace WebApiSample.Models
{
public class ToDoContext : DbContext
{
public ToDoContext(DbContextOptions<ToDoContext> options)
: base(options)
{
}
public DbSet<ToDoItem> TodoItems { get; set; }
}
}
namespace WebApiSample
{
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.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();
}
else
{
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
}
}
名称空间WebApiSample.Models
{
公共类待办事项
{
公共长Id{get;set;}
公共字符串名称{get;set;}
公共bool IsComplete{get;set;}
}
}
命名空间WebApiSample.Models
{
公共类ToDoContext:DbContext
{
公共ToDoContext(DbContextOptions选项)
:基本(选项)
{
}
公共DbSet TodoItems{get;set;}
}
}
Startup.cs:
namespace WebApiSample.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TodoController : ControllerBase
{
private readonly ToDoContext _context;
public TodoController(ToDoContext context)
{
_context = context;
if (_context.TodoItems.Count() == 0)
{
// Create a new TodoItem if collection is empty,
// which means you can't delete all TodoItems.
_context.TodoItems.Add(new ToDoItem { Name = "Item1" });
_context.SaveChanges();
}
}
// GET: api/Todo
[HttpGet]
public async Task<ActionResult<IEnumerable<ToDoItem>>> GetTodoItems()
{
return await _context.TodoItems.ToListAsync();
}
// GET: api/Todo/5
[HttpGet("{id}")]
public async Task<ActionResult<ToDoItem>> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return todoItem;
}
// POST: api/Todo
[HttpPost]
public async Task<ActionResult<ToDoItem>> PostTodoItem(ToDoItem todoItem)
{
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
}
// PUT: api/Todo/5
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, ToDoItem todoItem)
{
if (id != todoItem.Id)
{
return BadRequest();
}
_context.Entry(todoItem).State = EntityState.Modified;
await _context.SaveChangesAsync();
return NoContent();
}
// DELETE: api/Todo/5
[HttpDelete("{id}")]
public async Task<ActionResult<ToDoItem>> DeleteTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
_context.TodoItems.Remove(todoItem);
await _context.SaveChangesAsync();
return todoItem;
}
}
}
namespace WebApiSample.Models
{
public class ToDoItem
{
public long Id { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
}
}
namespace WebApiSample.Models
{
public class ToDoContext : DbContext
{
public ToDoContext(DbContextOptions<ToDoContext> options)
: base(options)
{
}
public DbSet<ToDoItem> TodoItems { get; set; }
}
}
namespace WebApiSample
{
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.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();
}
else
{
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
}
}
名称空间WebApiSample
{
公营创业
{
公共启动(IConfiguration配置)
{
配置=配置;
}
公共IConfiguration配置{get;}
//此方法由运行时调用。请使用此方法将服务添加到容器中。
public void配置服务(IServiceCollection服务)
{
services.AddDbContext(opt=>opt.UseInMemoryDatabase(“ToDoList”);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
//此方法由运行时调用。请使用此方法配置HTTP请求管道。
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
//默认的HSTS值为30天。您可能希望在生产场景中更改此值,请参阅https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
}
}
Program.cs
namespace WebApiSample
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
}
名称空间WebApiSample
{
公共课程
{
公共静态void Main(字符串[]args)
{
CreateWebHostBuilder(args.Build().Run();
}
公共静态IWebHostBuilder CreateWebHostBuilder(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup();
}
}
您可以看到它不使用任何数据库。我如何在这个项目中添加一个数据库,这样每当我运行它时,我就可以得到之前已经添加的项目列表
有什么想法吗?一般来说,实体框架将是最好的解决方案。下面是使用实体框架支持的数据库的链接。但是,如果要连接到其他数据库,则需要创建自己的数据库(创建、检索、更新、删除)。下面是一个使用MongoDB的CRUD示例。您是否正在尝试使用ASP.NET创建RESTful web服务?或者,您是否正在尝试创建一个使用(使用)RESTful web服务的ASP.NET网站?@JohnH前者,即使用ASP.NET的RESTful web服务