1.项目浅层结构介绍
- Models文件夹 :
- 存放Models 文件夹放置的是结构化对象——模型,比如返回的json结构化对象,是通过models定义的模型读取序列化格式,它就可以反序列化对象。 大多数客户端可以分析 XML 或 JSON。
- Controllers 文件夹:
- 存放设计的控制器,在 Web API 中,控制器是处理 HTTP 请求的对象,如果你懂MVC控制器,那么你应该能理解controllers 文件夹内定义的控制器与ASP.NET MVC不同,Web API 控制器类似于 MVC 控制器,但继承 ApiController 类而不是 Controller 类。
2. 创建一个空的Web API应用程序
新建ASP.NET Web 应用程序
选择空模板
3.利用模型和控制器实现数据资源的访问
添加模型
前面我们有说模型是结构化对象,这个对象我们既可以将数据序列化发送,也可以利用它反序列化读存。
namespace ProductsApp.Models
{
public class Product //商品模型
{
public int Id { get; set; } //商品id
public string Name { get; set; } //商品名称
public string Category { get; set; } // 类别
public decimal Price { get; set; }//价格
}
}
添加控制器
我们使用上述模型定义了三条结构化对象,并且重载了两个GET方法。
GET是固定前缀,因为会根据前缀是GET或者是POST等其他谓词方法识别方法的调用。
有人可能会疑问,既然是重载,为什么这两个方法名称不一样呢?从IEnumble<Product>,也能看出来Product是一个可迭代的集合,适宜根据规则GetAll
这个前缀表明这个方法返回的是一个集合,s则是Product这个资源的复数形式,应该是属于固定搭配了。
第二个重载方法就比较明确了,它接受一个id,如果满足对象的Id匹配到我们传入的id(p => p.Id == id),则返回这个资源,否则为null.
using ProductsApp.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;
namespace ProductsApp.Controllers
{
public class ProductsController : ApiController
{
Product[] products = new Product[]
{
new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
};
public IEnumerable<Product> GetAllProducts()
{
return products;
}
public IHttpActionResult GetProduct(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
}
}
get方法 | URL |
GetProduct | https://localhost:{你的端口号}/api/Products |
GetAllProducts | https://localhost:{你的端口号}/api/Products/id |
具体情况请看下图
注:本人只是一个初学者,若有不正确的地方,请帮忙指正。