WebApi增删改查Demo
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(); }
源码下载:webApiDemo
WebApi增删改查Demo的更多相关文章
- 【讲义提纲】以一个实战新闻cms增删改查demo为例,给学院国创队伍培训php
PHP实战基础——以一个新闻cms的增删改查为例 一. 环境配置 二. 数据库创建 三. 增删改查demo 连接数据库 <?php $link=mysq ...
- mvc模式jsp+servel+dbutils oracle基本增删改查demo
mvc模式jsp+servel+dbutils oracle基本增删改查demo 下载地址
- mvc模式jsp+servel+jdbc oracle基本增删改查demo
mvc模式jsp+servel+jdbc oracle基本增删改查demo 下载地址
- SSH登录与增删改查demo详解+源代码
点击下载,测试绝对可用SSH整合框架登录加增删改查demo 下载地址:http://download.csdn.net/detail/qq_33599520/9784679 一.框架概述 spri ...
- ssm学习(四)--完整的增删改查demo
上一篇文章简要介绍了将sping mvc加入整个框架,算是完成了ssm的集成.本节继续前面的内容,结合spring mvc做一个简单的增删改查demo. 1.首先,重写一下GeckoList.jsp页 ...
- ztree--插件实现增删改查demo(完整版)
ztree--插件实现增删改查demo(完整版) var setting = { async: { enable: true, ...
- AJAX 调用WebService 、WebApi 增删改查(笔记)
经过大半天努力,终于完成增删改查了!心情有点小激动!!对于初学者的我来说,一路上都是迷茫,坑!!虽说网上有资料,可动手起来却不易(初学者的我).(苦逼啊!) WebService 页面: /// &l ...
- hibernate之增删改查demo
package dao; import java.util.ArrayList; import java.util.List; import org.hibernate.Query; import o ...
- asp.net数据库增删改查demo
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
随机推荐
- block(六)循环引用-b
在ARC与非ARC环境下对block使用不当都会引起循环引用问题,一般表现为,某个类将block作为自己的属性变量,然后该类在block的方法体里面又使用了该类本身,简单说就是self.theBloc ...
- Swift 类
1.类概念 类是一种抽象的概念,它实际上并不存在于现实中的时间和空间里. 在定义一个类时,我们就会在类中定义该类事物的特性和行为,从术语上讲,特性叫类的属性,行为叫类的方法. 类是一个静态的概念,类本 ...
- Spark弹性分布式数据集RDD
RDD(Resilient Distributed Dataset)是Spark的最基本抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集的抽象实现.RDD是Spark最核心 ...
- Oracle 12C -- temporal validity
temporal validity需要在创建表的时候使用一个vaild-time维度(包含时间起始和结束) 创建有valid-time维度的表 (1)显式指定两个date-time列 SQL> ...
- Debian本地镜像长时间不更新
一.执行apt-get update 使用一个长期未更新的本地源,得到错误的提示: Release file for ... is expired. Updates for this reposito ...
- C# 创建windows 服务
1. 新建项目 1.1 右键解决方案 – 添加 – 新建项目 1.2 已安装模板 - windows - windows服务 – 输入名称 – 点击 ”确定” 2. 添加相应的 ...
- 【OpenCV】给图像加入噪声
图像噪声使图像在获取或是传输过程中收到随机信号干扰,妨碍人们对图像理解及分析处理的信号.非常多时候将图像噪声看做多维随机过程,因而描写叙述噪声的方法全然能够借用随机过程的描写叙述,也就是使用随机过程的 ...
- Internet上的WWW服务与HTTP协议(非常非常不错的文档,推荐订阅)
Internet上的WWW服务与HTTP协议 兼容性----H1TP/1.1与HTTP/1.0后向兼容;运行1.1版本的web服务器可以与运行1.0版本的浏览器“对话”,运行1.1版本的浏览器也可以与 ...
- python标准库介绍——35 pipes 模块详解
==pipes 模块== (只用于 Unix) ``pipes`` 模块提供了 "转换管道 (conversion pipelines)" 的支持. 你可以创建包含许多外部工具调用 ...
- MySQL 自带工具使用介绍
MySQL 数据库不仅提供了数据库的服务器端应用程序,同时还提供了大量的客户端工具程序,如mysql,mysqladmin,mysqldump 等等,都是大家所熟悉的.虽然有些人对这些工具的功能都已经 ...