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

posted @ 2015-04-10 23:57  haiziguo  阅读(10839)  评论(0编辑  收藏  举报