什么以及为什么 Asp.Net Web API2
什么和为什么?
Asp.Net 的 Web API2 是 Web API 的最新版本。使用 Asp.Net 框架提供的所有优点,这是一种实现 RESTful Web 服务的简单方法。一旦理解了 REST 的基本原理,就可以很容易地实现 Asp.net Web API2。Web API2 构建于 Asp.Net 的模块化可插拔管道模型之上。这意味着当托管 Web API2 的服务器收到请求时,它首先通过 Asp.Nets 请求管道。如果你发现默认功能不足以满足你的需求,则可以轻松添加自己的模块。随着最近关于 ASP.net vNext
的公告,这也意味着你可以在 Windows Server 之外托管 Web API2,从而打开了一系列用例。详情请见此处 。
怎么样?
Web API2 使用 MVC 中的 Controller 和 Action 概念。资源直接映射到控制器; 你通常会为每个主要数据实体(产品,人员,订单等)使用不同的控制器。Web API2 使用 Asp.Net 路由引擎将 URL 映射到控制器。通常,API 保存在/api/
路由中,这有助于区分 API 控制器与同一网站中的其他非 API。
操作用于映射到特定的 HTTP 谓词,例如,你通常会有一个返回所有实体的 GET 操作。这个动作会响应/api/Products
(其中’products’是你的控制器),看起来像这样:
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
你可能还有一个 GET
操作,它接受特定的 ID
并返回一个特定的实体。它会响应/api/Products/81
,看起来像这样:
public string Get(int id)
{
return "value";
}
使用 Web API 有很多隐藏的好处,你可能没有意识到,但实际上为你节省了大量的工作。
Web API2 是’One Asp.Net’的一部分
Web API2 是“One Asp.Net”系列的一部分,这意味着它本身支持你当前可能与 MVC 或 Web 表单一起使用的所有优秀共享功能,这包括(这些仅是几个示例):
- 实体框架
- 授权和身份
- Scaffolding
- 路由
序列化和模型绑定
Web API2 默认设置为以 XML 或 JSON 格式提供响应(默认为 JSON)。但是,作为开发人员,你不需要进行任何转换或解析 - 你只需返回一个强类型对象,Web API2 将其转换为 XML 或 JSON 并将其返回给调用客户端,这是一个名为 Content Negotiation 的过程。这是一个 GET
动作的示例,它返回一个强类型的 Product 对象。
public Product GetProduct(int id)
{
var product = _products.FirstOrDefault(p => p.ID == id);
if (product == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return Request.CreateResponse(HttpStatusCode.OK, product);
}
这也适用于使用称为模型验证的功能的传入请求。通过模型验证,Web API2 能够验证传入的响应正文数据并将其解析为强类型对象,以便你在代码中使用。这是模型绑定的一个示例:
public HttpResponseMessage Post(Product product)
{
if (ModelState.IsValid)
{
// Do something with the product (not shown).
return new HttpResponseMessage(HttpStatusCode.OK);
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
}