原文参考:
ASP.NET Web Api 2.2: Create a Self-Hosted OWIN-Based Web Api from Scratch
新建控制台程序,引入Owin包
PM> Install-Package Microsoft.AspNet.WebApi.OwinSelfHost -Pre
添加Startup类
public class Startup { public void Configuration(IAppBuilder app) { var webApiConfiguration = ConfigureWebApi(); // Use the extension method provided by the WebApi.Owin library: app.UseWebApi(webApiConfiguration); } private HttpConfiguration ConfigureWebApi() { var config = new HttpConfiguration(); config.Routes.MapHttpRoute( "DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional }); return config; } }
添加Models、Controllers文件夹,添加Company、CompaniesController
public class Company { [Key] public int Id { get; set; } public string Name { get; set; } }
public class CompaniesController : ApiController { ApplicationDbContext _Db = new ApplicationDbContext(); public IEnumerable<Company> Get() { return _Db.Companies; } public async Task<Company> Get(int id) { var company = await _Db.Companies.FirstOrDefaultAsync(c => c.Id == id); if (company == null) { throw new HttpResponseException( System.Net.HttpStatusCode.NotFound); } return company; } public async Task<IHttpActionResult> Post(Company company) { if (company == null) { return BadRequest("Argument Null"); } var companyExists = await _Db.Companies.AnyAsync(c => c.Id == company.Id); if (companyExists) { return BadRequest("Exists"); } _Db.Companies.Add(company); await _Db.SaveChangesAsync(); return Ok(); } public async Task<IHttpActionResult> Put(Company company) { if (company == null) { return BadRequest("Argument Null"); } var existing = await _Db.Companies.FirstOrDefaultAsync(c => c.Id == company.Id); if (existing == null) { return NotFound(); } existing.Name = company.Name; await _Db.SaveChangesAsync(); return Ok(); } public async Task<IHttpActionResult> Delete(int id) { var company = await _Db.Companies.FirstOrDefaultAsync(c => c.Id == id); if (company == null) { return NotFound(); } _Db.Companies.Remove(company); await _Db.SaveChangesAsync(); return Ok(); } }
添加EntityFramework包,添加ApplicationDbContext
namespace ConsoleWebApi.Models { public class ApplicationDbContext : DbContext { public ApplicationDbContext() : base("MyDatabase") { } public IDbSet<Company> Companies { get; set; } } public class ApplicationDbInitializer : DropCreateDatabaseAlways<ApplicationDbContext> { protected override void Seed(ApplicationDbContext context) { base.Seed(context); context.Companies.Add(new Company { Name = "Microsoft" }); context.Companies.Add(new Company { Name = "Google" }); context.Companies.Add(new Company { Name = "Apple" }); } } }
App.Config中添加连接字符串
<connectionStrings> <add name="MyDatabase" connectionString="Data Source=.;Initial Catalog=Test;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient"/> </connectionStrings>
入口Main中添加代码
static void Main(string[] args) { Console.WriteLine("Initializing and seeding database..."); Database.SetInitializer(new ApplicationDbInitializer()); var db = new ApplicationDbContext(); int count = db.Companies.Count(); Console.WriteLine("Initializing and seeding database with {0} company records...", count); string baseUri = "http://localhost:8080"; Console.WriteLine("Starting web Server..."); WebApp.Start<Startup>(baseUri); Console.WriteLine("Server running at {0} - press Enter to quit. ", baseUri); Console.ReadLine(); }
启动程序,打开http://localhost:8080/api/companies/1
即可看到结果。
时间: 2024-10-25 10:23:52