你的位置:首页 > ASP.net教程

[ASP.net教程]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();    }

参考地址: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