【翻译】ASP.NET Web API入门

来源:互联网 发布:淘宝客服务费结算方式 编辑:程序博客网 时间:2024/05/29 17:40
【翻译】ASP.NET Web API入门

简介

ASP.NET Web API是一个可以简化创建HTTP服务的框架

它支持包括浏览器和移动设备在内的各种客户端

ASP.NET Web API是在.NET Framework上创建RESTful应用程序的理想平台

译者注:关于RESTful web服务可以参见这里:http://zh.wikipedia.org/wiki/REST

准备

ASP.NET MVC 4包括ASP.NET Web API,请在这里安装:http://www.asp.net/web-api

使用Visual Studio 2010或者Visual Studio 2012都可以开发

关于ASP.NET Web API的特性请看这里:http://www.asp.net/whitepapers/mvc4-release-notes#_Toc317096197

简介

HTTP并不是单单为web pages服务的

它还是一个创建网络API的强大平台

这些API提供网络服务并可以交互数据。

HTTP协议简单、灵活最重要的是它无处不在

差不多你能想到的所有的平台都支持HTTP协议

所以通过HTTP协议可以兼容大部分客户端

包括浏览器、移动客户端和桌面应用

ASP.NET Web API是一个在.NET Framework上创建web API的类库

在这篇文章中,

你将看到如何使用ASP.NET Web API创建一个web api,

并且让这个api返回一个产品列表的数据

新建项目

如下图所示:

image

image

创建模型

模型是一个用来展现数据的对象

ASP.NET WEB API可以自动序列化模型对象

为JSON、XML、或者其他的数据格式

然后把序列化后的数据写入HTTP的Response消息内

客户端可以读取这些序列化后的数据

并把这些数据反序列化成一个对象

大多数客户端可以解析XML,JSON数据

并且可以根据消息的header来决定使用什么格式化数据的方式

image

创建一个名为Product的模型类

代码如下

using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace HelloWebAPI.Models{    public class Product    {        public int Id { get; set; }        public string Name { get; set; }        public string Category { get; set; }        public decimal Price { get; set; }     }}
 

创建控制器

如果你使用过ASP.NET MVC

你会发现ASP.NET WEB API的控制器

与ASP.NET MVC的控制器基本相同

最大的不同就是

ASP.NET WEB API的控制器继承自ApiController

ASP.NET MVC的控制器继承自Controller

WEB API的控制器并不返回View,而是直接返回数据。

image

image

并不一定要把所创建的控制器类文件放在Controller文件夹中

创建的文件,修改之后代码如下

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Http;using System.Web.Http;using HelloWebAPI.Models;namespace HelloWebAPI.Controllers{    public class ProductsController : ApiController    {        Product[] products = new Product[]          {              new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1.39M },              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 Product GetProductById(int id)        {            var product = products.FirstOrDefault((p) => p.Id == id);            if (product == null)            {                var resp = new HttpResponseMessage(HttpStatusCode.NotFound);                throw new HttpResponseException(resp);            }            return product;        }        public IEnumerable<Product> GetProductsByCategory(string category)        {            return products.Where(                (p) => string.Equals(p.Category, category,                    StringComparison.OrdinalIgnoreCase));        }    }}
 

GetAllProducts方法返回一个Product类型的数组

GetProductById通过ID查找Product

GetProductsByCategory通过分类查找Product

至此

你可以通过如下URI访问相应的方法

GetAllProducts:/api/products

GetProductById:/api/products/id

GetProductsByCategory:/api/products/?category=category

访问WEB API

运行此工程,

访问如下URL可以得到结果

http://localhost:5380/api/products

image

这里我们看到的是XML的内容

但WEB API非常智能

可以通过客户端的请求来确定传输什么类型的数据

我们可以通过如下代码来获取JSON类型的数据

            $(document).ready(function () {                // Send an AJAX request                 $.getJSON("api/products/",                function (data) {                    // On success, 'data' contains a list of products.                     $.each(data, function (key, val) {                        // Format the text to display.                         var str = val.Name + ': $' + val.Price;                        // Add a list item for the product.                         $('<li/>', { html: str })                        .appendTo($('body'));                    });                });            });
 

获取到的数据如下图所示

image

项目源码下载地址:

http://files.cnblogs.com/liulun/HelloWebAPI.zip

分类: ASP.NET/MVC/Web API
好文要顶关注我 收藏该文
liulun
关注 - 67
粉丝 - 1309
+加关注
7
0
«上一篇:使用jstree创建无限分级的树(ajax动态创建子节点)
»下一篇:ASP.NET WebAPI 路由规则与POST数据
posted @ 2012-06-14 16:03 liulun 阅读(6177) 评论(3)编辑 收藏

  
#1楼2012-06-14 17:04 Sam tsai  
能自己指定返回类型么?我觉得这个跟mvc原来的 jsonResult 差不多吧,可能只是做了一些封装。
支持(0)反对(0)
http://pic.cnblogs.com/face/u22806.jpg?id=01105921
  
#2楼[楼主]2012-06-16 15:31 liulun  
@ Sam tsai
应该是可以的~
等我看到这一块再写~
支持(0)反对(0)
http://pic.cnblogs.com/face/28932/20150930094306.png
  
#3楼26371642013/3/18 16:37:15 2013-03-18 16:37 john23.net  
感谢分享


0 0
原创粉丝点击