WebApi 的CRUD 的方法的应用
Posted 天道酬勤,勤能补拙。地道酬实,实能不弱。生有涯 力有限
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebApi 的CRUD 的方法的应用相关的知识,希望对你有一定的参考价值。
一.最近一直在忙于开发公司的新的项目和搭建公司的框架,也好久没有写博客了。对于RaidDevelopmentFramework 我有着自己的见解在应用到实际的框架中确实挺好用的,但是还是存在一部分的问题。这个需要后期进行不断的完善以及修改。最近一段时间对于这个WebApi 我又进行重新的研究和学习。
ASP.NET Web API是用于构建可以从任何客户机访问(包括浏览器和移动设备)的HTTP服务的框架。 它是一种基于.NET Framework构建RESTFUL应用程序的理想平台。
二.那么WebApi 如何在传统的应用程序中进行使用和结合到.NET FrameWork 来进行使用。
三.ASP.NET Web API特性
-
Web API 是一个构建基于restful服务的理想平台。
-
Web API 是基于Asp.Net,支持ASP.Net 请求/响应管道
-
Web API 有良好的路由机制。
-
Web API 支持不同格式的响应数据,内置支持JSON、XML BSON格式。
-
Web API 可以部署非常方便。
-
Web API框架包括新的HttpClient,他可以与Web API服务器通信。HttpClient可以在ASP.Net MVC服务器端,Windows Form应用程序,控制台应用程序或其他应用程序中使用。
四. 关于
ASP.NET Web API版本
web api版本 | 支持的.net framework版本 | 对应的MVC版本 | 支持的VS版本 |
Web API 1.0 | .NET Framework 4.0 | ASP.NET MVC 4 | VS 2010 |
Web API 2.0 | .NET Framework 4.5 | ASP.NET MVC 5 | VS 2012,VS 2013 |
ASP.NET Web API VS WCF
web api | wcf |
开源,支持.net framework | 支持.net framework |
只支持HTT通信协议 | 支持HTTP,TCP,UDP以及自定义通信协议等 |
良好的路由机制来匹配url与对应接口 | 基于Attribute来匹配 |
使用类似于Asp.net MVC的路由规则和Controller模型 | 使用Service,契约等 |
不支持可靠的消息传递和事务。 | 支持可靠的消息传递和事务。 |
可以使用HttpConfiguration 来配置Web Api,不一定需要web.config配置 | 使用web.config和Attribute来配置一个服务 |
适合构建RESTful服务。 | 支持构建RESTful服务但有局限性 |
五. 下面通过进行对于CRUD 的方法使用来进行说明。
1 #region 使用客户端进行调用WebApi来进行实现 2 #endregion 3 using System; 4 using System.Collections.Generic; 5 using System.Linq; 6 using System.Text; 7 using System.Threading.Tasks; 8 using System.Web.Http; 9 using System.Web.Http.Hosting; 10 using System.Net.Http.Formatting; 11 using System.Net.Http; 12 using System.Net; 13 using WebAPI.Models; 14 using Newtonsoft.Json; 15 using System.Security.Cryptography; 16 using System.IO; 17 18 namespace ConsoleClient 19 { 20 class Program 21 { 22 23 private readonly static JsonMediaTypeFormatter formatter = 24 GlobalConfiguration.Configuration.Formatters 25 .Where(f => 26 { 27 return f.SupportedMediaTypes.Any 28 (v => v.MediaType.Equals("application/json", StringComparison.InvariantCultureIgnoreCase)); 29 }) 30 .FirstOrDefault() as JsonMediaTypeFormatter; 31 static void Main(string[] args) 32 { 33 //GetAll(); 34 //GetFristMessage(); 35 //Update(); 36 //Delete(); 37 Console.WriteLine(DecryptDES("zqindFI5UNSKrp5weiuIm5cScBM=", "Y+Z7bE1/DoLCWxchX9eeyg==")); 38 //AddCustomerMessage(); 39 Console.ReadLine(); 40 } 41 42 /// <summary> 43 /// 获取列表的信息 44 /// </summary> 45 private static async void GetAll() 46 { 47 HttpClient _httpClient = new HttpClient(); 48 string _url = string.Format(@"http://localhost:3536/api/Customers"); 49 var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; 50 var data = await _httpClient.GetAsync(_url); 51 using (var httpClient = new HttpClient(handler)) 52 { 53 var response = await data.Content.ReadAsAsync<List<Customers>>(); 54 var responseModel = await httpClient.GetAsync(_url); 55 if (responseModel.IsSuccessStatusCode == true) 56 { 57 foreach (var items in response.ToList()) 58 { 59 Console.WriteLine("用户名:" + items.ContactName + "公司名称:" + items.CompanyName); 60 } 61 Console.WriteLine("=============================================="); 62 var jsonData = await responseModel.Content.ReadAsStringAsync(); 63 Console.WriteLine(jsonData); 64 var customerList = JsonConvert.DeserializeObject<List<Customers>>(jsonData); 65 foreach (var items in customerList.ToList()) 66 { 67 Console.WriteLine("用户名:" + items.ContactName + "公司名称:" + items.CompanyName); 68 } 69 } 70 } 71 } 72 73 /// <summary> 74 ///获取单个的数据的信息 75 /// </summary> 76 private static async void GetFristMessage() 77 { 78 var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; 79 using (var httpClient = new HttpClient(handler)) 80 { 81 var response = await httpClient.GetAsync(@"http://localhost:3536/api/Customers/Get?id=2"); 82 83 var customer = response.Content.ReadAsAsync<Customers>().Result; 84 var jsonData = response.Content.ReadAsStringAsync().Result;//将其转化为JSON 85 var json = await response.Content.ReadAsStringAsync(); //调用此方法将其转化为JSON效果和上面一样 86 Console.WriteLine(json); 87 var customerModel = JsonConvert.DeserializeObject<Customers>(await response.Content.ReadAsStringAsync()); 88 if (response.IsSuccessStatusCode == true) 89 { 90 Console.WriteLine("用户名称:" + customerModel.ContactName + "公司名称:" + customerModel.CompanyName); 91 Console.WriteLine(response.StatusCode); 92 Console.WriteLine(response.RequestMessage); 93 Console.WriteLine("用户名称:" + customer.ContactName + "公司名称:" + customer.CompanyName); 94 } 95 } 96 } 97 98 /// <summary> 99 ///进行更新数据 100 /// </summary> 101 private static async void Update() 102 { 103 var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; 104 105 using (var httpClient = new HttpClient(handler)) 106 { 107 try 108 { 109 Customers customer = new Customers(); 110 customer.Address = "江苏"; 111 customer.City = "南京"; 112 customer.CompanyName = "南京***有限公司"; 113 customer.Country = "中国"; 114 customer.CustomerID = 123; 115 customer.Phone = "****"; 116 customer.ContactName = "李四"; 117 118 var content = new FormUrlEncodedContent(new Dictionary<string, string>() 119 { 120 {"ContactName","张三"}, 121 {"Phone","***"}, 122 {"Address","江苏南京"}, 123 {"Country","中国"}, 124 {"CompanyName","江苏**"} 125 }); 126 127 //两种方式的返回的结果是一致的。但是对于其中的传输的方式确实不一致的。 128 var response = await httpClient.PutAsync<Customers>(@"http://localhost:3536/api/Customers/Get?id=123", customer, formatter); 129 //var response = await httpClient.PutAsync(@"http://localhost:3536/api/Customers/Get?id=123",content); 130 131 var customerModel = response.Content.ReadAsAsync<Customers>().Result; 132 var jsonData = response.Content.ReadAsStringAsync().Result; 133 var json = await response.Content.ReadAsStringAsync(); 134 //将返回的JSON 数据进行反序列化成为对象 135 var customerData = JsonConvert.DeserializeObject<CustomersModel>(jsonData); 136 Console.WriteLine(customerData.CompanyName); 137 Console.WriteLine("========================================="); 138 Console.WriteLine(response.Content.ReadAsStringAsync().Result); 139 if (response.IsSuccessStatusCode == true) 140 { 141 if (customerModel != null) 142 { 143 Console.WriteLine("用户名称:" + customerModel.ContactName + "公司名称:" + customerModel.CompanyName); 144 } 145 } 146 147 } 148 catch (Exception ex) 149 { 150 throw new Exception(ex.ToString()); 151 } 152 } 153 } 154 155 /// <summary> 156 ///根据ID进行删除的操作 157 /// </summary> 158 private static async void Delete() 159 { 160 var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; 161 using (var httpClient = new HttpClient(handler)) 162 { 163 var response =await httpClient.DeleteAsync(@"http://localhost:3536/api/Customers/Delete?id=123"); 164 Console.WriteLine("删除操作的状态码:"+response.StatusCode); 165 } 166 } 167 168 /// <summary> 169 /// 添加客户的信息 170 /// </summary> 171 public static async void AddCustomerMessage() 172 { 173 var handler = new HttpClientHandler() {AutomaticDecompression=DecompressionMethods.GZip }; 174 Customers customer = new Customers(); 175 customer.Address = "江苏"; 176 customer.City = "南京"; 177 customer.CompanyName = "南京****"; 178 customer.Country = "中国"; 179 customer.CustomerID = 123; 180 customer.Phone = "***"; 181 customer.ContactName = "赵六"; 182 using (var httpClient=new HttpClient(handler)) 183 { 184 var response = await httpClient.PostAsync<Customers>(@"http://localhost:3536/api/Customers",customer,formatter); 185 if (response.IsSuccessStatusCode==true) 186 { 187 var data= response.Content.ReadAsStringAsync().Result; 188 Console.WriteLine(response.Content.ReadAsAsync<Customers>().Result.CompanyName); 189 } 190 } 191 } 192 193 public static async void Test(string url= "http://localhost:3536/api/Customers", string json="") 194 { 195 var handler = new HttpClientHandler() { AutomaticDecompression=DecompressionMethods.GZip}; 196 HttpContent httpContent = new StringContent(json); 197 httpContent.Headers.ContentType=new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); 198 using (var httpClient=new HttpClient(handler)) 199 { 200 var response =await httpClient.PostAsync(url, httpContent); 201 Console.WriteLine(response.Content.ReadAsStringAsync().Result); 202 } 203 } 204 205 public class CustomersModel 206 { 207 public int CustomerID { get; set; } 208 public string CompanyName { get; set; } 209 public string ContactName { get; set; } 210 public string ContactTitle { get; set; } 211 public string Address { get; set; } 212 public string City { get; set; } 213 public string Region { get; set; } 214 public string PostalCode { get; set; } 215 public string Country { get; set; } 216 public string Phone { get; set; } 217 public string Fax { get; set; } 218 } 219 220 221 public static string DecryptDES(string decryptString, string decryptKey) 222 { 223 try 224 { 225 byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey); 226 byte[] rgbIV = { 0x13, 0x24, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; 227 228 byte[] inputByteArray = Convert.FromBase64String(decryptString); 229 DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider(); 230 MemoryStream mStream = new MemoryStream(); 231 CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write); 232 cStream.Write(inputByteArray, 0, inputByteArray.Length); 233 cStream.FlushFinalBlock(); 234 return Encoding.UTF8.GetString(mStream.ToArray()); 235 } 236 catch 237 { 238 return decryptString; 239 } 240 } 241 242 } 243 }
2017.08-20 22:19:23
以上内容全部是基于原创 如需转载请标明!!!!谢谢合作。
以上是关于WebApi 的CRUD 的方法的应用的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们在进行 CRUD 操作时使用 Asp.net WebApi?