API(Application Programming Interface,应用程序编程接口)是一些预先定义的接口,说的更加通俗一点,别人写好的代码,或者编译好的程序,提供给你使用, 就叫做API。
一.基本的创建使用过程,实例如下:
1

2勾选Web Api,模板选择空

3在Models文件夹里添加一个模型类,并命名为Product,并在类中添加以下代码

namespace WebApplication1.Models
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
}
4在Controllers文件夹里添加一个控制器,将其命名ProductsController,并添加以下代码
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using WebApplication1.Models;
namespace WebApplication1.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);
}
[HttpPost]
public Product GetProduct2(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return null;
}
return product;
}
}
}
5运行程序,在IE url栏中输入
http://localhost:58984/api/Products就可以调用action(即public方法)----GetAllProducts()


根据此处Products.json可知道返回的是json数据.
二.值得注意的点.
1.在文件夹App_Start有文件WebApiConfig.cs内容如下(看注释)
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务
// Web API 路由
config.MapHttpAttributeRoutes();//[HttpGet]\[HttpPost]等特性映射
config.Routes.MapHttpRoute(
name: "DefaultApi", //Web Api就是根据routeTemplate的路径来调用的
routeTemplate: "api/{controller}/{id}",//controller代表控制器名字,即Products; id是可选参数.
defaults: new { id = RouteParameter.Optional }
);
}
2.可以在上面的routeTemplate里添加一个{action}来指定调用方法的名字:
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务
// Web API 路由
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",//action就是方法的意思
defaults: new { id = RouteParameter.Optional }
);
}
此时调用方法GetAllProducts()就需要URL這樣寫:http://localhost:58984/api/Products/GetAllProducts
调用GetProduct()方法的url:
http://localhost:58984/api/Products/GetProduct?id=1
但是,输入http://localhost:58984/api/Products/GetProduct2?id=1是不可以调用GetProduct2()方法的,这是因为url调用的都是HttpGet,而GetProduct2()是HttpPost
3.public方法的名字(也就是action的名字),是以"Get", “Post”, “Put”, “Delete”, “Head”, “Options”, 或 "Patch"开头,那么按照约定,该方法(action)匹配对应的http请求方法的调用。如果开头没有上述的关键字,默认表示该方法只支持Post。最常见的就是get和post,get的话,就是将参数放到url上去提交,post的话,参数不会显示在url中。(post\delete\put\get 对应增删改查)可以在方法上面添加特性[HttpGet][HttpPost]等表明请求的类型,如在web api里的一个方法.
[HttpPost]
public Product GetProduct2(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return null;
}
return product;
}
三.在PostMan中进行调用
在postman中进行调用需要注意:
b.用PostMan调用时一定要发布WebApi,用发布的服务器地址(这是我将WebApplication1站点发布到IIS上的url: http://10.167.66.6:8033/)进行调用,用本地运行的地址(本地运行的url http://localhost:58984/)调用不行
这一句说的是有问题的,本地运行的也可以调用,只是需要对postman作如下设置,就可以进行正常调用


c.在web api的[HttpPost]方法
中,只能用Params+key/value,用Post+body+raw+json是不行的;这一点与web service相反,在web service中只能用Post+body+raw+json才可以,用Params+key/value是不可以的.
这一句也是有问题的,当web api接口是从body中传值时用Post+body+raw+json方式,从头部传值时
用Params+key/value

实例:



被折叠的 条评论
为什么被折叠?



