首页 技术 正文
技术 2022年11月9日
0 收藏 580 点赞 2,668 浏览 6347 个字

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,086
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,561
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,411
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,184
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,820
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,904