首页 > 代码库 > WebApi学习笔记07:使用webapi核心文件模板 --创建OData端点
WebApi学习笔记07:使用webapi核心文件模板 --创建OData端点
1.Web项目
1.1概述
前面介绍的EF访问和操作数据库,要OUT了(当然不是啦),这章使用OData(开源数据协议)……
1.2创建项目
在“解决方案资源管理器”中右键,添加-》新建解决方案文件夹,命名为:OData
右键“OData”逻辑文件夹,添加-》新建项目:
1.3安装OData框架
1.4添加模型
在Models文件夹下,添加Product.cs,其代码:
namespace ProductService.Models{ public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } public string Category { get; set; } }}
1.5安装EF
1.6添加上下文类
在Models文件夹下,添加EFContext.cs,其代码:
using System.Data.Entity;namespace ProductService.Models{ public class EFContext : DbContext { public EFContext() : base("name=ProductContext") { } public DbSet<Product> Products { get; set; } }}
1.7连接字符串
在Web.config里<configuration>下,添加:
<connectionStrings> <add name="ProductContext" connectionString="Data Source=(localdb)\v11.0; Initial Catalog=ProductDB; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|ProductDB.mdf" providerName="System.Data.SqlClient" /> </connectionStrings>
1.8配置端点
修改App_Start\WebApiConfig.cs,其代码:
using ProductService.Models;using System.Web.Http;using System.Web.OData.Builder;using System.Web.OData.Extensions;namespace ProductService{ public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 //创建实体数据模型 (EDM) ODataModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet<Product>("Products"); //添加路由 config.MapODataServiceRoute( routeName: "ODataRoute", routePrefix: null, model: builder.GetEdmModel()); // Web API 路由 //config.MapHttpAttributeRoutes(); //config.Routes.MapHttpRoute( // name: "DefaultApi", // routeTemplate: "api/{controller}/{id}", // defaults: new { id = RouteParameter.Optional } //); } }}
1.9添加控制器
在Controllers文件夹下,添加ProductsController.cs,其代码:
using ProductService.Models;using System.Data.Entity;using System.Data.Entity.Infrastructure;using System.Linq;using System.Net;using System.Threading.Tasks;using System.Web.Http;using System.Web.OData;namespace ProductService.Controllers{ public class ProductsController : ODataController { EFContext db = new EFContext(); [EnableQuery] public IQueryable<Product> Get() { return db.Products; } [EnableQuery] public SingleResult<Product> Get([FromODataUri] int key) { IQueryable<Product> result = db.Products.Where(p => p.Id == key); return SingleResult.Create(result); } public async Task<IHttpActionResult> Post(Product product) { if (!ModelState.IsValid) { return BadRequest(ModelState); } db.Products.Add(product); await db.SaveChangesAsync(); return Created(product); } public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<Product> product) { if (!ModelState.IsValid) { return BadRequest(ModelState); } var entity = await db.Products.FindAsync(key); if (entity == null) { return NotFound(); } product.Patch(entity); try { await db.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ProductExists(key)) { return NotFound(); } else { throw; } } return Updated(entity); } public async Task<IHttpActionResult> Put([FromODataUri] int key, Product update) { if (!ModelState.IsValid) { return BadRequest(ModelState); } if (key != update.Id) { return BadRequest(); } db.Entry(update).State = EntityState.Modified; try { await db.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ProductExists(key)) { return NotFound(); } else { throw; } } return Updated(update); } public async Task<IHttpActionResult> Delete([FromODataUri] int key) { var product = await db.Products.FindAsync(key); if (product == null) { return NotFound(); } db.Products.Remove(product); await db.SaveChangesAsync(); return StatusCode(HttpStatusCode.NoContent); } private bool ProductExists(int key) { return db.Products.Any(p => p.Id == key); } protected override void Dispose(bool disposing) { db.Dispose(); base.Dispose(disposing); } }}
1.10运行
WebApi学习笔记07:使用webapi核心文件模板 --创建OData端点
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。