zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    第六周作业
    第四周作业(登录验证码)
    JSP第二次作业
    JSP第一次作业求1-100间的素数
    软件测试课堂作业
    安卓作业(购物商城)
    安卓作业
    Android 简易计算器
    jsp第七次作业
    JSP第六次作业
  • 原文地址:https://www.cnblogs.com/lzhp/p/4416002.html
Copyright © 2011-2022 走看看