[译]Getting Started with ASP.NET Web API 2 (C#)

单击此处查看原文

HTTP不是单单为网页服务的,它更是一种用于构建API(用于暴露服务和数据)的强大平台。HTTP简洁、灵活、无处不在。几乎你能想到的所有平台都有一个HTTP库,所以HTTP服务可以提供给各种各样的客户端,包括:PC浏览器,手机设备,传统桌面应用。

ASP.NET Web API是基于.NET Framework的一种框架,可用于构建web APIs。在本文中,你将使用ASP.NET Web API来构建一个Web API项目,用于提供一系列的产品信息。

本文使用到的软件版本

· Visual Studio 2013

· Web API 2

新建一个Web API项目

在本文中,你将使用ASP.NET Web API来新建一个web API用于提供各种产品信息。前端项目使用jQuery来展示获取的结果。

启动Visual Studio,选择首页的新建项目,或者菜单栏: 文件->新建->项目

模板窗口,选择已安装,展开VIsual C#节点,在VIsual C#下,选择Web。在一系列项目模板中,选择ASP.NET Web应用程序,将项目命名为"ProductsApp"然后单击确定

新建ASP.NET项目窗口,选择Empty模板,在“为以下对象添加文件夹和核心引用”下,选择Web API,单击确定

同样你也可以使用Web API模板来新建一个Web API项目。Web API模板使用ASP.NET MVC来提供API帮助页。我在本文中使用了空模板,因为我想要展示的Web API是不依赖于MVC的。一般来讲,如果你想要使用Web API,不必事先知道ASP.NET MVC。

添加一个Model

一个model就是一个对象,在你的应用中代表着数据。ASP.NET Web API可以自动把你的model序列化为JSON、XML或者其他格式,再将序列化之后的数据写入HTTP response message的body中。只要一个客户端可以解析这种序列化格式,它就将数据反序列化出来。现在绝大部分的客户端都可以解析XML或者JSON,而且客户端也可以在HTTP request message的Accept header中设置自己想要的数据格式。

好的,我们现在来新建一个简单的model来表示产品信息。

如果没看见 解决方案资源管理器 ,可以单击菜单栏的视图->解决方案资源管理器来打开。现在右键单击Models文件夹,选择添加->类

将类命名为“Product.cs”,并且将下列属性写入类中。

namespace ProductsApp.Models
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
}

添加一个Controller

在Web API中,一个 controller 就是一个用于处理HTTP requests的对象。接下来我们将要新建一个controller,它能够返回一个Product集合,或者根据ID返回单个Product对象。

注意 如果你已经使用过ASP.NET MVC,你会对controller感到非常熟悉。不错,Web API controllers跟MVC controller的确非常相似,不同的是Web API controller继承了ApiController,而非Controller

解决方案资源管理器中,右键单击Controllers文件夹,选择添加->控制器

添加基架窗口,选择Web API 2 控制器 - 空,单击添加

添加控制器窗口,将其命名为“ProductsController”,单击添加

现在基架已经新建了一个名为ProductsController.cs的文件。

你不必将controllers放在Controllers文件夹中。文件夹的命名只不过是为了方便组织管理你的源文件。

如果这个文件还未打开,双击它来打开,并且将下面的代码替换上去。

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);
}
}
}

为了保证例子的简洁,controller中的products都是存了固定的array。当然,在实际项目中,你可能是从数据库中得到数据,或者使用其他的扩展数据源。

这个controller定义了两个方法来返回products:

  • GetAllProducts方法将整个products list作为IEnumerable类型数据返回。
  • GetProduct方法根据Product的ID来查找对应的一个Product

就是它们了!你拥有了一个可以工作的web API。controller中的每个方法就相当于一个或者多个URIs。

Controller Method URI
GetAllProducts /api/products
GetProduct /api/products/id

GetProduct方法对应URI中的 id 是个占位符。比如,如果你想获取id为5的product,那么你请求的URI应该是 api/products/5。

如果想要获取更多关于Web API routes HTTP requests与controller方法的信息,参考:Routing in ASP.NET Web API

使用JavaScript和jQuery调用Web API

在本节,我们将添加一个HTML page,通过AJAX来调用web API。接下来我们使用jQuery的AJAX来调用,并且将返回结果更新到界面上。

在解决方案资源管理器中,右键单击项目,选择添加->新建项目

添加新项窗口中,选择Visual C#->Web->HTML页,并将其命名为“index.html”。

用以下的代码替换文件中的所有内容:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Product App</title>
</head>
<body> <div>
<h2>All Products</h2>
<ul id="products" />
</div>
<div>
<h2>Search by ID</h2>
<input type="text" id="prodId" size="5" />
<input type="button" value="Search" onclick="find();" />
<p id="product" />
</div> <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
<script>
var uri = 'api/products'; $(document).ready(function () {
// Send an AJAX request
$.getJSON(uri)
.done(function (data) {
// On success, 'data' contains a list of products.
$.each(data, function (key, item) {
// Add a list item for the product.
$('<li>', { text: formatItem(item) }).appendTo($('#products'));
});
});
}); function formatItem(item) {
return item.Name + ': $' + item.Price;
} function find() {
var id = $('#prodId').val();
$.getJSON(uri + '/' + id)
.done(function (data) {
$('#product').text(formatItem(data));
})
.fail(function (jqXHR, textStatus, err) {
$('#product').text('Error: ' + err);
});
}
</script>
</body>
</html>

有很多方式可以获取jQuery。在本例中,我使用了Microsoft Ajax CDN,你也可以从http://jquery.com/下载。当然,ASP.NET Web API项目模板也包含了jQuery。

获取Products List

发送一条HTTP GET request:"/api/products",可以获取Products List。

jQuery的getJSON方法可以发送一条AJAX request。为了响应结果包含JSON对象数组,done方法指定了一个回调函数,它将会在请求成功后触发。在回调函数中,我们可以将请求到的product信息更新到DOM中。

$(document).ready(function () {
// Send an AJAX request
$.getJSON(apiUrl)
.done(function (data) {
// On success, 'data' contains a list of products.
$.each(data, function (key, item) {
// Add a list item for the product.
$('<li>', { text: formatItem(item) }).appendTo($('#products'));
});
});
});

根据ID获取一个Product

发送一个HTTP GET request:"/api/products/id",可以获取一条Product(其中id是Product ID)。

function find() {
var id = $('#prodId').val();
$.getJSON(apiUrl + '/' + id)
.done(function (data) {
$('#product').text(formatItem(data));
})
.fail(function (jqXHR, textStatus, err) {
$('#product').text('Error: ' + err);
});
}

我们依然调用getJson来发送AJAX request,不过这次我们将ID放在URI中。请求响应的结果是一条JSON格式的Product。

运行应用程序

按下F5来开始调试应用,界面看起来就像下图所示:

若想根据ID获取一条Product,输入ID并且单击Search:

如果你输入了非法ID,服务器将返回HTTP error:

介绍浏览器开发者工具的懒得翻译,就一件事:F12

在Azure上运行的也是懒得翻译,就一个概念:微软的一个云服务,有兴趣去了解一下 单击此处转到Microsoft Azure

从ASP.NET Web API 2 (C#)开始说起的更多相关文章

  1. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

  2. ASP.NET Web API Model-ActionBinding

    ASP.NET Web API Model-ActionBinding 前言 前面的几个篇幅把Model部分的知识点划分成一个个的模块来讲解,而在控制器执行过程中分为好多个过程,对于控制器执行过程(一 ...

  3. ASP.NET Web API Model-ParameterBinding

    ASP.NET Web API Model-ParameterBinding 前言 通过上个篇幅的学习了解Model绑定的基础知识,然而在ASP.NET Web API中Model绑定功能模块并不是被 ...

  4. ASP.NET Web API Model-ModelBinder

    ASP.NET Web API Model-ModelBinder 前言 本篇中会为大家介绍在ASP.NET Web API中ModelBinder的绑定原理以及涉及到的一些对象模型,还有简单的Mod ...

  5. ASP.NET Web API Model-ValueProvider

    ASP.NET Web API Model-ValueProvider 前言 前面一篇讲解了Model元数据,Model元数据是在Model绑定中很重要的一部分,只是Model绑定中涉及的知识点比较多 ...

  6. ASP.NET Web API Model-ModelMetadata

    ASP.NET Web API Model-ModelMetadata 前言 前面的几个篇幅主要围绕控制器的执行过程,奈何执行过程中包含的知识点太庞大了,只能一部分一部分的去讲解,在上两篇中我们看到在 ...

  7. ASP.NET Web API 过滤器创建、执行过程(二)

    ASP.NET Web API 过滤器创建.执行过程(二) 前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器 ...

  8. ASP.NET Web API 过滤器创建、执行过程(一)

    ASP.NET Web API 过滤器创建.执行过程(一) 前言 在上一篇中我们讲到控制器的执行过程系列,这个系列要搁置一段时间了,因为在控制器执行的过程中包含的信息都是要单独的用一个系列来描述的,就 ...

  9. ASP.NET Web API 控制器执行过程(一)

    ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...

  10. ASP.NET Web API 控制器创建过程(二)

    ASP.NET Web API 控制器创建过程(二) 前言 本来这篇随笔应该是在上周就该写出来发布的,由于身体跟不上节奏感冒发烧有心无力,这种天气感冒发烧生不如死,也真正的体会到了什么叫病来如山倒,病 ...

随机推荐

  1. Swift辛格尔顿设计模式(SINGLETON)

    本文已更新为2.0语法,具体查看:一叶单例模式 一.意图 保证一个类公有一个实例.并提供一个訪问它的全局訪问点. 二.使用场景 1.使用场景 当类仅仅能有一个实例并且客户能够从一个众所周知的訪问点訪问 ...

  2. Guava之简介

    1.介绍 Guava最初是在2007年作为“Google Collection  Library” 出现的,这个项目在处理Java集合时提供了一些有用的工具,Google的这个guava项目已经成为了 ...

  3. Zend Server更新至6.2版本——虚拟主机全方位管理

    Zend Server自从发布6.0以来,并支持云服务,成为很多PHP程序所选择的Web服务器. Zend Server 6.2版本从更新内容来看,解决了Web服务器与虚拟主机之间的协同管理.并在细节 ...

  4. JQUERY 插件开发——MENU(导航菜单)

    JQUERY 插件开发——MENU(导航菜单) 故事背景:由于最近太忙了,已经很久没有写jquery插件开发系列了.但是凭着自己对这方面的爱好,我还是抽了一些时间来过一下插件瘾的.今天的主题是导航菜单 ...

  5. cocos2d-x3.2中将XCode发展project转移到VS2010可能会发生错误

    一些代码在线xcode写.我们希望我们自己的屌丝vs上述的实施,要重新构建它project,然后加载.但是绝对 没想到在VS里新建project再加入文件,编译后出现了好多错误.以下就把解决这些错误的 ...

  6. NHProfiler使用方法

    NHProfiler使用方法 NHProfiler是一个针对Nhibernate运行分析的工具. 使用如下: (1)在创建ISessionFactory的项目中引用NHProfiler安装目录下的Hi ...

  7. Google Dataflow

    十分钟了解分布式计算:Google Dataflow 介绍 Google Cloud Dataflow是一种构建.管理和优化复杂数据处理流水线的方法,集成了许多内部技术,如用于数据高效并行化处理的Fl ...

  8. 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历

    根据自己的学习体会并参考了一些网上的资料,以java写出了二叉树的创建.搜索.删除和遍历等操作,尚未实现的功能有:根据先序和中序遍历,得到后序遍历以及根据后序和中序遍历,得到先序遍历,以及获取栈的深度 ...

  9. Oracle单行函数笔记

    Oracle中单行函数的分类:1.字符函数substr():字符串截取select substr('我爱你,你知道么?',0,4) from dual执行结果:我爱你,length函数:字符串长度se ...

  10. JAVA学习:多态

    多态:可以理解为事物存在的多种体现形态.   人:男人,女人 动物:猫,狗. 猫 x = new 猫(); 动物 x = new 猫()   1,多态的体现 父类的引用指向了自己的子类对象. 父类的引 ...