设为首页 收藏本站
查看: 1109|回复: 0

[经验分享] 在Core环境下用WebRequest连接上远程的web Api 实现数据的简单CRUD(附Git地址)

[复制链接]

尚未签到

发表于 2018-1-12 23:44:21 | 显示全部楼层 |阅读模式
1 using Microsoft.AspNetCore.Mvc;  

2 using Newtonsoft.Json;  

3 using Newtonsoft.Json.Linq;  

4 using System;  

5 using System.Collections.Generic;  

6 using System.IO;  

7 using System.Linq;  

8 using System.Net;  

9 using System.Net.Http;  

10 using System.Net.Http.Headers;  

11 using System.Text;  

12 using System.Threading.Tasks;  

13 using TestAPI.Models;  

14  
15 namespace TestAPI.Controllers
  
16 {

  
17     public>  
18     {
  
19         #region 成员变量
  
20         //这个baseURL是我的webApi的地址
  
21         private static string baseURL = "http://localhost:56853/api/users";
  
22         //用于存放所有的用户
  
23         private static IList<Users> _context;
  
24
  
25         #endregion
  
26
  
27         #region 构造函数
  
28         public UsersController()
  
29         {
  
30             //实例化对象
  
31             _context = new List<Users>();
  
32             //获取所有的用户的信息
  
33             _context = GetAllUserList();
  
34
  
35         }
  
36
  
37         #endregion
  
38
  
39         #region 类内方法
  
40
  
41
  
42         ///  https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client
  
43
  
44
  
45
  
46         /// <summary>
  
47         /// 通过api获取所有的用户的信息
  
48         /// </summary>
  
49         /// <returns>JSON String</returns>
  
50         private string GetALLUserInfoFromAPI()
  
51         {
  
52             HttpClient client = new HttpClient();
  
53             var con = client.GetStringAsync(baseURL);
  
54             return con.Result;
  
55         }
  
56
  
57         private string UsersConvertToJson(Users u)
  
58         {
  
59             return JsonConvert.SerializeObject(u);
  
60         }
  
61         /// <summary>
  
62         /// 传递数据到远程API的数据库中
  
63         /// </summary>
  
64         /// <param name="u"></param>
  
65         /// <returns></returns>
  
66         private async Task<string> CreateAsync(Users u)
  
67         {
  
68             string url = baseURL;
  
69             string requestMethod = "post";
  
70             return await HandleData(u, url, requestMethod);
  
71         }
  
72
  
73         private async Task<string> UpdateAsync(Users u)
  
74         {
  
75             string url = baseURL + @"/" + u.ID;
  
76             string requestMethod = "put";
  
77             return await HandleData(u, url, requestMethod);
  
78         }
  
79         /// <summary>
  
80         /// 处理数据
  
81         /// </summary>
  
82         /// <param name="Data">User实体类</param>
  
83         /// <param name="Url">远程API的URL</param>
  
84         /// <param name="RequestMethod">请求的方法</param>
  
85         /// <returns></returns>
  
86         private async Task<string> HandleData(Users Data, string Url, string RequestMethod)
  
87         {
  
88             string UsersJson = UsersConvertToJson(Data);
  
89             var request = WebRequest.CreateHttp(Url);
  
90             request.Accept = "application/json";
  
91             //下边这行不设置会出现无法识别mediaType 415 这个错误
  
92             request.ContentType = "application/json";
  
93             request.Method = RequestMethod;
  
94             //向request提交数据
  
95             using (StreamWriter writer = new StreamWriter(await request.GetRequestStreamAsync()))
  
96             {
  
97                 writer.Write(UsersJson);
  
98             }
  
99             //获取响应
  
100             var reponse = await request.GetResponseAsync();
  
101             //返回响应数据
  
102             using (StreamReader reader = new StreamReader(reponse.GetResponseStream()))
  
103             {
  
104                 return reader.ReadToEnd();
  
105             }
  
106         }
  
107         private async Task<string> DeleteAsync(Users u)
  
108         {
  
109             string url = baseURL + @"/" + u.ID;
  
110             string requestMethod = "delete";
  
111             return await HandleData(u, url, requestMethod);
  
112         }

  
113         private bool UsersExist(int>  
114         {

  
115             return _context.Any(u => u.ID ==>  
116         }
  
117
  
118         /// <summary>
  
119         /// 获取所有用户的List
  
120         /// </summary>
  
121         private IList<Users> GetAllUserList()
  
122         {
  
123             IList<Users> userslist = new List<Users>();
  
124             var JsonString = GetALLUserInfoFromAPI();
  
125             JArray UsersArray = JArray.Parse(JsonString);
  
126             for (int i = 0; i < UsersArray.Count; i++)
  
127             {
  
128                 userslist.Add(StringConvertToUser(UsersArray.ToString()));
  
129             }
  
130             return userslist;
  
131         }
  
132         /// <summary>
  
133         /// 将Json对象的字符串转化为users对象
  
134         /// </summary>
  
135         /// <param name="JsonString">json对象的字符串</param>
  
136         /// <returns>Users对象</returns>
  
137         private Users StringConvertToUser(string JsonString)
  
138         {
  
139             return JsonConvert.DeserializeObject<Users>(JsonString);
  
140         }
  
141         #endregion
  
142
  
143         #region Index
  
144         // GET: Users
  
145         public async Task<IActionResult> Index()
  
146         {
  
147             return View(_context);
  
148         }
  
149
  
150
  
151
  
152         #endregion
  
153
  
154         #region Details
  
155
  
156         // GET: Users/Details/5

  
157         public async Task<IActionResult> Details(int?>  
158         {
  
159             if (id == null)
  
160             {
  
161                 return BadRequest();
  
162             }

  
163             var users = _context.FirstOrDefault(u => u.ID ==>  
164             if (users == null)
  
165             {
  
166                 return NotFound();
  
167             }
  
168             return View(users);
  
169         }
  
170
  
171         #endregion
  
172
  
173         #region Create
  
174
  
175         // GET: Users/Create
  
176         public IActionResult Create()
  
177         {
  
178             return View();
  
179         }
  
180
  
181         // POST: Users/Create
  
182         // To protect from overposting attacks, please enable the specific properties you want to bind to, for
  
183         // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
  
184         [HttpPost]
  
185         [ValidateAntiForgeryToken]
  
186         public async Task<IActionResult> Create([Bind("ID,name,pwd")] Users users)
  
187         {
  
188             if (ModelState.IsValid)
  
189             {
  
190
  
191                 await CreateAsync(users);
  
192                 return RedirectToAction("Index");
  
193             }
  
194             return View();
  
195         }
  
196
  
197         #endregion
  
198
  
199         #region Edit
  
200
  
201         // GET: Users/Edit/5

  
202         public async Task<IActionResult> Edit(int?>  
203         {
  
204             if (id == null)
  
205             {
  
206                 return BadRequest();
  
207             }

  
208             var users = _context.FirstOrDefault(u => u.ID ==>  
209             if (users == null)
  
210             {
  
211                 return NotFound();
  
212             }
  
213             return View(users);
  
214         }
  
215
  
216         // POST: Users/Edit/5
  
217         // To protect from overposting attacks, please enable the specific properties you want to bind to, for
  
218         // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
  
219         [HttpPost]
  
220         [ValidateAntiForgeryToken]

  
221         public async Task<IActionResult> Edit(int>  
222         {
  
223
  
224             if (ModelState.IsValid)
  
225             {
  
226                 if (id != users.ID)
  
227                 {
  
228                     return BadRequest();
  
229                 }
  
230                 try
  
231                 {
  
232                     await UpdateAsync(users);
  
233                     return RedirectToAction("Index");
  
234                 }
  
235                 catch
  
236                 {
  
237                     if (UsersExist(users.ID))
  
238                     {
  
239                         return NotFound();
  
240                     }
  
241                     throw;
  
242                 }
  
243
  
244             }
  
245             return View();
  
246         }
  
247
  
248
  
249         #endregion
  
250
  
251         #region Delete
  
252
  
253
  
254         // GET: Users/Delete/5

  
255         public async Task<IActionResult> Delete(int?>  
256         {
  
257             if (id == null)
  
258             {
  
259                 return BadRequest();
  
260             }

  
261             var users = _context.FirstOrDefault(u => u.ID ==>  
262             if (users == null)
  
263             {
  
264                 return NotFound();
  
265             }
  
266
  
267             return View(users);
  
268         }
  
269
  
270         // POST: Users/Delete/5
  
271         [HttpPost, ActionName("Delete")]
  
272         [ValidateAntiForgeryToken]

  
273         public async Task<IActionResult> DeleteConfirmed(int>  
274         {

  
275             var users = _context.SingleOrDefault(u => u.ID ==>  
276             await DeleteAsync(users);
  
277             return RedirectToAction("Index");
  
278         }
  
279         #endregion
  
280
  
281     }
  
282 }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-434488-1-1.html 上篇帖子: IDEA中Git的使用 下篇帖子: SourceTree + Beynod Compare解决Git冲突的方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表