1.新建webapi项目

2.配置WebApiConfig

public const string DEFAULT_ROUTE_NAME = "MyDefaultRoute";
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: DEFAULT_ROUTE_NAME,
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
); // 取消注释下面的代码行可对具有 IQueryable 或 IQueryable<T> 返回类型的操作启用查询支持。
// 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。
// 有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=279712。
//config.EnableQuerySupport(); // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
// 有关详细信息,请参阅: http://www.asp.net/web-api
config.EnableSystemDiagnosticsTracing();
}

3.在models文件新建person模型

public class Person
{
public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }

4.在models文件中添加IPersonRepository

interface IPersonRepository
{
IEnumerable<Person> GetAll(); Person Get(int id); Person Add(Person person); void Remove(int id); bool Update(Person person); }

5.在models文件中添加仓库实现

public class PersonRepository : IPersonRepository
{ // We are using the list and _fakeDatabaseID to represent what would // most likely be a database of some sort, with an auto-incrementing ID field: private List<Person> _people = new List<Person>(); private int _fakeDatabaseID = 1; public PersonRepository()
{ // For the moment, we will load some sample data during initialization. this.Add(new Person { LastName = "Lennon", FirstName = "John" }); this.Add(new Person { LastName = "McCartney", FirstName = "Paul" }); this.Add(new Person { LastName = "Harrison", FirstName = "George" }); this.Add(new Person { LastName = "Starr", FirstName = "Ringo" }); } public IEnumerable<Person> GetAll()
{ return _people; } public Person Get(int id)
{ return _people.Find(p => p.Id == id); } public Person Add(Person person)
{ if (person == null)
{ throw new ArgumentNullException("person"); } person.Id = _fakeDatabaseID++; _people.Add(person); return person; } public void Remove(int id)
{ _people.RemoveAll(p => p.Id == id); } public bool Update(Person person)
{ if (person == null)
{ throw new ArgumentNullException("person"); } int index = _people.FindIndex(p => p.Id == person.Id); if (index == -1)
{ return false; } _people.RemoveAt(index); _people.Add(person); return true; } }

6.在controllers中添加apiController为PersonController

public class PersonController : ApiController
{
static readonly IPersonRepository databasePlaceholder = new PersonRepository(); public IEnumerable<Person> GetAllPeople()
{ return databasePlaceholder.GetAll(); } public Person GetPersonByID(int id)
{ Person person = databasePlaceholder.Get(id); if (person == null)
{ throw new HttpResponseException(HttpStatusCode.NotFound); } return person; } public HttpResponseMessage PostPerson(Person person)
{ person = databasePlaceholder.Add(person); string apiName = WebApi.WebApiConfig.DEFAULT_ROUTE_NAME; var response = this.Request.CreateResponse<Person>(HttpStatusCode.Created, person); string uri = Url.Link(apiName, new { id = person.Id }); response.Headers.Location = new Uri(uri); return response; } public bool PutPerson(Person person)
{ if (!databasePlaceholder.Update(person))
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return true; } public void DeletePerson(int id)
{ Person person = databasePlaceholder.Get(id); if (person == null)
{ throw new HttpResponseException(HttpStatusCode.NotFound); } databasePlaceholder.Remove(id); } }

以上就完成了webapi的简单搭建。接下来创建客户端来访问webapi。

7.新建console项目,添加webapi Core Library。

添加引用

using System.Net.Http;

using Newtonsoft.Json.Linq;

private const string url = "http://localhost:43571/";
static void Main(string[] args)
{
Console.WriteLine("Retreive All The People:"); JArray people = GetAllPerson(); foreach (var person in people)
{ Console.WriteLine(person); } // WRITE A SPECIFIC PERSON TO CONSOLE (JSON): Console.WriteLine(Environment.NewLine + "Retreive a Person by ID:"); JObject singlePerson = GetPerson(2); Console.WriteLine(singlePerson); // ADD NEW PERSON, THEN WRITE TO CONSOLE (JSON): Console.WriteLine(Environment.NewLine + "Add a new Person and return the new object:"); JObject newPerson = AddPerson("Atten", "John"); Console.WriteLine(newPerson); // UPDATE AN EXISTING PERSON, THEN WRITE TO CONSOLE (JSON): Console.WriteLine(Environment.NewLine + "Update an existing Person and return a boolean:"); // Pretend we already had a person's data: JObject personToUpdate = GetPerson(2); string newLastName = "Richards"; Console.WriteLine("Update Last Name of " + personToUpdate + "to " + newLastName); // Pretend we don't already know the Id: int id = personToUpdate.Value<int>("Id"); string FirstName = personToUpdate.Value<string>("FirstName"); string LastName = personToUpdate.Value<string>("LastName"); if (UpdatePerson(id, newLastName, FirstName))
{ Console.WriteLine(Environment.NewLine + "Updated person:"); Console.WriteLine(GetPerson(id)); } // DELETE AN EXISTING PERSON BY ID: Console.WriteLine(Environment.NewLine + "Delete person object:"); DeletePerson(5); // WRITE THE UPDATED LIST TO THE CONSOLE: { // WRITE ALL PEOPLE TO CONSOLE Console.WriteLine("Retreive All The People using classes:"); people = GetAllPerson(); foreach (var person in people)
{ Console.WriteLine(person); } } Console.Read(); } /// <summary>
/// get all Person
/// </summary>
/// <returns></returns>
static JArray GetAllPerson()
{
HttpClient client = new HttpClient();
HttpResponseMessage response = client.GetAsync(url + "api/person").Result;
return response.Content.ReadAsAsync<JArray>().Result;
} static JObject GetPerson(int id)
{
HttpClient client = new HttpClient();
HttpResponseMessage response = client.GetAsync(url + "api/person/" + id).Result;
return response.Content.ReadAsAsync<JObject>().Result;
} static JObject AddPerson(string newLastName, string newFirstName)
{
var newPerson = new { LastName = newLastName, FirstName = newFirstName }; HttpClient client = new HttpClient(); client.BaseAddress = new Uri(url); var response = client.PostAsJsonAsync("api/person", newPerson).Result; return response.Content.ReadAsAsync<JObject>().Result; } // Sends HTTP PUT to Person Controller on API with Anonymous Object: static bool UpdatePerson(int personId, string newLastName, string newFirstName)
{ // Initialize an anonymous object representing a the modified Person record: var newPerson = new { id = personId, LastName = newLastName, FirstName = newFirstName }; HttpClient client = new HttpClient(); client.BaseAddress = new Uri(url); var response = client.PutAsJsonAsync("api/person/", newPerson).Result; return response.Content.ReadAsAsync<bool>().Result; } // Sends HTTP DELETE to Person Controller on API with Id Parameter: static void DeletePerson(int id)
{ HttpClient client = new HttpClient(); client.BaseAddress = new Uri(url); var relativeUri = "api/person/" + id.ToString(); var response = client.DeleteAsync(relativeUri).Result; client.Dispose(); }

参考地址:http://typecastexception.com/post/2013/07/01/Creating-a-Clean-Minimal-Footprint-ASPNET-WebAPI-Project-with-VS-2012-and-ASPNET-MVC-4.aspx

http://typecastexception.com/post/2013/07/03/Building-Out-a-Clean-REST-ful-WebApi-Service-with-a-Minimal-WebApi-Project.aspx

源码下载:webApiDemo

WebApi增删改查Demo的更多相关文章

  1. 【讲义提纲】以一个实战新闻cms增删改查demo为例,给学院国创队伍培训php

    PHP实战基础——以一个新闻cms的增删改查为例 一.        环境配置 二.        数据库创建 三.        增删改查demo 连接数据库 <?php $link=mysq ...

  2. mvc模式jsp+servel+dbutils oracle基本增删改查demo

    mvc模式jsp+servel+dbutils oracle基本增删改查demo 下载地址

  3. mvc模式jsp+servel+jdbc oracle基本增删改查demo

    mvc模式jsp+servel+jdbc oracle基本增删改查demo 下载地址

  4. SSH登录与增删改查demo详解+源代码

    点击下载,测试绝对可用SSH整合框架登录加增删改查demo 下载地址:http://download.csdn.net/detail/qq_33599520/9784679   一.框架概述 spri ...

  5. ssm学习(四)--完整的增删改查demo

    上一篇文章简要介绍了将sping mvc加入整个框架,算是完成了ssm的集成.本节继续前面的内容,结合spring mvc做一个简单的增删改查demo. 1.首先,重写一下GeckoList.jsp页 ...

  6. ztree--插件实现增删改查demo(完整版)

    ztree--插件实现增删改查demo(完整版) var setting = {                 async: {                     enable: true,  ...

  7. AJAX 调用WebService 、WebApi 增删改查(笔记)

    经过大半天努力,终于完成增删改查了!心情有点小激动!!对于初学者的我来说,一路上都是迷茫,坑!!虽说网上有资料,可动手起来却不易(初学者的我).(苦逼啊!) WebService 页面: /// &l ...

  8. hibernate之增删改查demo

    package dao; import java.util.ArrayList; import java.util.List; import org.hibernate.Query; import o ...

  9. asp.net数据库增删改查demo

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

随机推荐

  1. 【Linux】字符转换命令col

    [root@www ~]# col [-xb] 选项与参数: -x :将 tab 键转换成对等的空格键 -b :过滤掉所有的控制字符,包括RLF(Reverse Line Feed)和HRF(Halt ...

  2. android在不加载图片的前提下获得图片的宽高

    public static int[] getImageWidthHeight(String path){ BitmapFactory.Options options = new BitmapFact ...

  3. mysql_install_db 运行结果

    # /usr/local/mysql/scripts/mysql_install_db \ > --defaults-file=/etc/my.cnf \ > --basedir=/usr ...

  4. Java Nashorn--Part 5

    Nashorn 的高级应用 Nashorn 是一个复杂的编程环境,它被设计为一个强大的平台,用于部署应用程序,并与Java具有极大的互操作性. 让我们来看一些更高级的用于 JavaScript 到 J ...

  5. 用Python3发送邮件详解

    [整个邮件系统是怎样工作的] 邮件自互联网诞生之初就有了,它和web服务一样也是采用的c/s架构,比如我们常见的邮件客户端有outlook.foxmail这些邮件客户端软件. 当我们要发邮件时客户端就 ...

  6. Caffe搭建:常见问题解决办法和ubuntu使用中遇到问题(持续更新)

    严正声明: 在linux下面使用命令行操作时,一定要懂得命令行的意思,然后再执行,要不然在不知道接下来会发生什么的情况下输入一通命令,linux很有可能崩掉. 因为在linux下面,使用sudo以及r ...

  7. Mongo如何导出 CSV文件

    mongoexport /h localhost /port 37189 /u aa /p aa /authenticationDatabase admin /d testdb /c usertag ...

  8. 解决Unity协程无法同步返回的问题

    Unity的协程是轻量的异步解决方案,但是每调用一次yield就必须等下一帧才能继续,这一点带来了很多约束. 比如如下代码: void OnEnable() { StartCoroutine(_Do( ...

  9. Oracle 11G 安装图文教程

    Oracle 11G 下载地址:http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.htm ...

  10. Atitit 面试问题总结

    Atitit 面试问题总结 1. 面试约人阶段可以预先1俩分钟大概问下情况1 2. 自我介绍阶段1 3. 技术方面2 3.1. 界面方面2 3.2. Java 本身   了解spring mybati ...