1.新建webapi項目web
2.配置WebApiConfigapi
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模型asp.net
public class Person { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
4.在models文件中添加IPersonRepositorypost
interface IPersonRepository { IEnumerable<Person> GetAll(); Person Get(int id); Person Add(Person person); void Remove(int id); bool Update(Person person); }
5.在models文件中添加倉庫實現ui
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爲PersonControllerthis
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。url
7.新建console項目,添加webapi Core Library。spa
添加引用.net
using System.Net.Http;
using Newtonsoft.Json.Linq;
code
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