基于.NET Core 框架搭建WebApi项目

一 什么是.NET Core?

    随着2014年 Xamarin和微软发起.NET基金会,微软在2014年11月份 开放.NET框架源代码。在.NET开源基金会的统一规划下诞生了.NET Core 。也就是说.NET Core Framework是参考.NET Framework重新开发的.NET实现,Mono是.NET Framework的一个开源的、跨平台的实现。

二 .NET Core与.NET FrameWork和Mono之间的联系?

    .NET Framework将成为.NET Core在Windows上的一个发行版,Mono将成为.NET Core的一个跨平台发行版。

三. 如何构建.NET Core项目?

 1.安装环境配置:

    首先你电脑上的vs版本是2015 并且保证已经升级至 update3及以上,如果你还没升级,请从此链接下载升级 ed2k://|file|cn_visual_studio_enterprise_2015_with_update_3_x86_x64_dvd_8923298.iso|7787208704|A1C1D2AFBC09D8778C92CF19DEC8F4F4|/

    如果你上述操作已经完成,那么你还需要下载.NET Core的SDK和Tools来安装,下载链接https://download.microsoft.com/download/A/3/8/A38489F3-9777-41DD-83F8-2CBDFAB2520C/packages/DotNetCore.1.0.0-SDK.Preview2-x64.exe

https://download.microsoft.com/download/2/F/8/2F864C4E-6980-4AFC-B64E-0AC04837FD6C/DotNetCore.1.0.0-VS2015Tools.Preview2.0.1.exe

提示:如果在安装DotNetCore.1.0.0-VS2015Tools出现以下问题

解决办法如下:

    1.关闭当前的VS开发工具,以便继续安装;

    2.检查是否出现网络问题,去掉IE浏览器的证书认证

  3.如果以上不能帮你解决问题,可以尝试直接进入exe所在的文件夹在运行命令
DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1

2.创建一个.NET Core web项目

我们来看看与传统的MVC有何不同

可以发现与传统的MVC目录结构并没多大出入,那么尝试写一个Demo吧!

新建一个webapi项目:

可以看到路由自定义部分现已放在了APIController中,默认为api/controller,此处已重写路由

如要创建POST或者GET请求函数,与之前定义一致,在函数上面标记上[HttpPost]或者[HttpGet],模拟请求代码就不一一列举了,请自行脑补。

附上一个HttpClient请求帮助类:

  1   2 using Newtonsoft.Json;
  3 using System;
  4 using System.Collections.Generic;
  5 using System.Linq;
  6 using System.Net;
  7 using System.Net.Http;
  8 using System.Net.Http.Headers;
  9 using System.Text;
 10 using System.Threading.Tasks;
 11 
 12 namespace Common
 13 {
 14     /// <summary>
 15     /// HttpClient的帮助类
 16     /// 2015年11月12日14:43:45
 17     /// </summary>
 18     public class HttpClientHelper
 19     {
 20         /*Edit Desc: 提取默认的Http Heads UserAgen Author:Xuja Time:2016-5-3 16:46:29*/
 21         private static readonly string userAgen = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36";
 22 
 23         /// <summary>
 24         /// 根据Url地址Get请求返回数据
 25         /// 2015年11月12日14:50:02
 26         /// </summary>
 27         /// <param name="url">请求的地址</param>
 28         /// <param name="ch_httpcode">http状态码</param>
 29         /// <returns>字符串</returns>
 30         public static string GetResponse(string url, out string httpStatusCode)
 31         {
 32             httpStatusCode = string.Empty;
 33             HttpClient httpClient = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip });
 34             HttpResponseMessage response = null;
 35             try
 36             {
 37                 //httpClient.MaxResponseContentBufferSize = 256000;
 38                 httpClient.DefaultRequestHeaders.Add("user-agent", userAgen);
 39                 //httpClient = new HttpClient();
 40                 //using (HttpClient httpClient = new HttpClient())
 41                 //{
 42                 httpClient.CancelPendingRequests();
 43                 httpClient.DefaultRequestHeaders.Clear();
 44                 httpClient.DefaultRequestHeaders.Accept.Add(
 45                    new MediaTypeWithQualityHeaderValue("application/json"));
 46                 Task<HttpResponseMessage> taskResponse = httpClient.GetAsync(url);
 47                 taskResponse.Wait();
 48                 response = taskResponse.Result;
 49                 //using (HttpResponseMessage response = taskResponse.Result)
 50                 //{
 51 
 52                 //HttpResponseMessage response = httpClient.GetAsync(url).Result;
 53                 if (response.IsSuccessStatusCode)
 54                 {
 55                     Task<System.IO.Stream> taskStream = response.Content.ReadAsStreamAsync();
 56                     taskStream.Wait();
 57                     //此处会抛出异常:不支持超时设置,对返回结果没有影响
 58                     System.IO.Stream dataStream = taskStream.Result;
 59                     System.IO.StreamReader reader = new System.IO.StreamReader(dataStream);
 60                     string result = reader.ReadToEnd();
 61 
 62                     return result;
 63                 }
 64                 //}
 65                 return null;
 66                 //}
 67             }
 68             catch
 69             {
 70                 return null;
 71             }
 72             finally
 73             {
 74                 if (response != null)
 75                 {
 76                     response.Dispose();
 77                 }
 78                 if (httpClient != null)
 79                 {
 80                     httpClient.Dispose();
 81                 }
 82             }
 83         }
 84 
 85         /// <summary>
 86         /// 根据Url地址Get请求返回数据
 87         /// xuja
 88         /// 2015年11月12日14:50:02
 89         /// </summary>
 90         /// <param name="url">请求的地址</param>
 91         /// <returns>字符串</returns>
 92         public static string GetResponse(string url)
 93         {
 94             HttpClient httpClient = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip });
 95             HttpResponseMessage response = null;
 96             try
 97             {
 98                 //httpClient.MaxResponseContentBufferSize = 256000;
 99                 httpClient.DefaultRequestHeaders.Add("user-agent", userAgen);
100                 //httpClient = new HttpClient();
101                 //using (HttpClient httpClient = new HttpClient())
102                 //{
103                 httpClient.CancelPendingRequests();
104                 httpClient.DefaultRequestHeaders.Clear();
105                 httpClient.DefaultRequestHeaders.Accept.Add(
106                    new MediaTypeWithQualityHeaderValue("application/json"));
107                 Task<HttpResponseMessage> taskResponse = httpClient.GetAsync(url);
108                 taskResponse.Wait();
109                 response = taskResponse.Result;
110                 //using (HttpResponseMessage response = taskResponse.Result)
111                 //{
112 
113                 //HttpResponseMessage response = httpClient.GetAsync(url).Result;
114                 if (response.IsSuccessStatusCode)
115                 {
116                     Task<System.IO.Stream> taskStream = response.Content.ReadAsStreamAsync();
117                     taskStream.Wait();
118                     System.IO.Stream dataStream = taskStream.Result;
119                     System.IO.StreamReader reader = new System.IO.StreamReader(dataStream);
120                     string result = reader.ReadToEnd();
121 
122                     return result;
123                 }
124                 //}
125                 return null;
126                 //}
127             }
128             catch
129             {
130                 return null;
131             }
132             finally
133             {
134                 if (response != null)
135                 {
136                     response.Dispose();
137                 }
138                 if (httpClient != null)
139                 {
140                     httpClient.Dispose();
141 
142                 }
143             }
144         }
145 
146 
147         /// <summary>
148         /// 根据Url地址Get请求返回实体
149         /// xuja
150         /// 2015年11月12日14:50:02
151         /// </summary>
152         /// <param name="url">请求的地址</param>
153         /// <returns>实体</returns>
154         public static T GetResponse<T>(string url)
155         {
156             HttpClient httpClient = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip });
157             HttpResponseMessage response = null;
158             try
159             {
160                 //using (HttpClient httpClient = new HttpClient())
161                 //{
162                 //httpClient.MaxResponseContentBufferSize = 256000;
163                 httpClient.DefaultRequestHeaders.Add("user-agent", userAgen);
164                 httpClient.CancelPendingRequests();
165                 httpClient.DefaultRequestHeaders.Clear();
166                 httpClient.DefaultRequestHeaders.Accept.Add(
167                    new MediaTypeWithQualityHeaderValue("application/json"));
168                 //HttpResponseMessage response = httpClient.GetAsync(url).Result;
169                 Task<HttpResponseMessage> taskResponse = httpClient.GetAsync(url);
170                 taskResponse.Wait();
171                 T result = default(T);
172                 response = taskResponse.Result;
173                 //using (HttpResponseMessage response = taskResponse.Result)
174                 //{
175                 if (response.IsSuccessStatusCode)
176                 {
177                     Task<System.IO.Stream> taskStream = response.Content.ReadAsStreamAsync();
178                     taskStream.Wait();
179                     System.IO.Stream dataStream = taskStream.Result;
180                     System.IO.StreamReader reader = new System.IO.StreamReader(dataStream);
181                     string s = reader.ReadToEnd();
182 
183                     result = JsonConvertTool.DeserializeObject<T>(s);
184 
185                 }
186                 //}
187                 return result;
188                 //}
189             }
190             catch (Exception e)
191             {
192                 var resp = new HttpResponseMessage(HttpStatusCode.InternalServerError)
193                 {
194                     Content = new StringContent(e.ToString()),
195                     ReasonPhrase = "error"
196                 };
197                 //throw new HttpResponseException(resp); 
198                 return default(T);
199             }
200             finally
201             {
202                 if (response != null)
203                 {
204                     response.Dispose();
205                 }
206                 if (httpClient != null)
207                 {
208                     httpClient.Dispose();
209 
210                 }
211 
212             }
213         }
214 
215 
216         /// <summary>
217         /// 处理Get的Url
218         /// des:huyf
219         /// </summary>
220         /// <param name="dic"></param>
221         /// <returns></returns>
222         public static string WithParameters(Dictionary<string, string> dic)
223         {
224             string result = "?";
225             foreach (var item in dic)
226             {
227                 result += item.Key + "=" + item.Value + "&";
228             }
229             result = result.Remove(result.Length - 1);
230 
231             return result;
232         }
233 
234         /// <summary>
235         /// Post请求返回字符
236         /// </summary>
237         /// <param name="url">请求地址</param>
238         /// <param name="postData">请求数据</param>
239         /// <returns>字符</returns>
240         public static string PostResponse(string url, string postData)
241         {
242             HttpClient httpClient = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip });
243             HttpResponseMessage response = null;
244             try
245             {
246                 //using (HttpClient httpClient = new HttpClient())
247                 //{
248                 httpClient.MaxResponseContentBufferSize = 256000;
249                 httpClient.DefaultRequestHeaders.Add("user-agent", userAgen);
250                 httpClient.CancelPendingRequests();
251                 httpClient.DefaultRequestHeaders.Clear();
252                 HttpContent httpContent = new StringContent(postData);
253                 httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
254                 Task<HttpResponseMessage> taskResponse = httpClient.PostAsync(url, httpContent);
255                 taskResponse.Wait();
256                 response = taskResponse.Result;
257                 //using (HttpResponseMessage response = taskResponse.Result)
258                 //{
259                 //HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
260                 if (response.IsSuccessStatusCode)
261                 {
262                     Task<System.IO.Stream> taskStream = response.Content.ReadAsStreamAsync();
263                     taskStream.Wait();
264                     System.IO.Stream dataStream = taskStream.Result;
265                     System.IO.StreamReader reader = new System.IO.StreamReader(dataStream);
266                     string result = reader.ReadToEnd();
267                     return result;
268                 }
269                 //}
270                 return null;
271                 //}
272             }
273             catch
274             {
275                 return null;
276             }
277             finally
278             {
279                 if (response != null)
280                 {
281                     response.Dispose();
282                 }
283                 if (httpClient != null)
284                 {
285                     httpClient.Dispose();
286 
287                 }
288 
289             }
290 
291         }
292         /// <summary>
293         /// Post请求返回字符
294         /// </summary>
295         /// <param name="url">请求地址</param>
296         /// <param name="postData">请求数据</param>
297         /// <returns>字符</returns>
298         public static string PostResponse(string url, object obj)
299         {
300             HttpClient httpClient = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip });
301             HttpResponseMessage response = null;
302             try
303             {
304                 //using (HttpClient httpClient = new HttpClient())
305                 //{
306                 httpClient.MaxResponseContentBufferSize = 256000;
307                 httpClient.DefaultRequestHeaders.Add("user-agent", userAgen);
308                 httpClient.CancelPendingRequests();
309                 httpClient.DefaultRequestHeaders.Clear();
310                 string postData = JsonConvertTool.SerializeObject(obj);
311                 HttpContent httpContent = new StringContent(postData);
312                 httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
313                 Task<HttpResponseMessage> taskResponse = httpClient.PostAsync(url, httpContent);
314                 taskResponse.Wait();
315                 response = taskResponse.Result;
316                 //using (HttpResponseMessage response = taskResponse.Result)
317                 //{
318                 //HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
319                 if (response.IsSuccessStatusCode)
320                 {
321                     Task<System.IO.Stream> taskStream = response.Content.ReadAsStreamAsync();
322                     taskStream.Wait();
323                     System.IO.Stream dataStream = taskStream.Result;
324                     System.IO.StreamReader reader = new System.IO.StreamReader(dataStream);
325                     string result = reader.ReadToEnd();
326                     return result;
327                 }
328                 else
329                 {
330                     //LogHelper.WriteInfo(typeof(HttpClientHelper), "结果:" + response.StatusCode + "内容:" + JsonConvertTool.SerializeObject(obj));
331                 }
332                 //}
333                 return null;
334                 //}
335             }
336             catch (Exception exception)
337             {
338                 //LogHelper.Error("结果:异常 内容:" + JsonConvertTool.SerializeObject(obj) + "ex:" + exception.Message, exception);
339                 return null;
340             }
341             finally
342             {
343                 if (response != null)
344                 {
345                     response.Dispose();
346                 }
347                 if (httpClient != null)
348                 {
349                     httpClient.Dispose();
350 
351                 }
352 
353             }
354 
355         }
356         /// <summary>
357         /// Post请求返回实体 
358         /// </summary>
359         /// <param name="url">请求地址</param>
360         /// <param name="postData">请求数据</param>
361         /// <returns>实体</returns>
362         public static T PostResponse<T>(string url, string postData)
363         {
364             HttpClient httpClient = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip });
365             HttpResponseMessage response = null;
366             try
367             {
368                 //using (HttpClient httpClient = new HttpClient())
369                 //{
370                 httpClient.MaxResponseContentBufferSize = 256000;
371                 httpClient.DefaultRequestHeaders.Add("user-agent", userAgen);
372                 httpClient.CancelPendingRequests();
373                 httpClient.DefaultRequestHeaders.Clear();
374                 HttpContent httpContent = new StringContent(postData);
375 
376                 httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
377                 T result = default(T);
378                 Task<HttpResponseMessage> taskResponse = httpClient.PostAsync(url, httpContent);
379                 taskResponse.Wait();
380                 response = taskResponse.Result;
381                 //using (HttpResponseMessage response = taskResponse.Result)
382                 //{
383                 //HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
384                 if (response.IsSuccessStatusCode)
385                 {
386                     Task<System.IO.Stream> taskStream = response.Content.ReadAsStreamAsync();
387                     taskStream.Wait();
388                     System.IO.Stream dataStream = taskStream.Result;
389                     System.IO.StreamReader reader = new System.IO.StreamReader(dataStream);
390                     string s = reader.ReadToEnd();
391                     result = JsonConvertTool.DeserializeObject<T>(s);
392                 }
393                 //}
394                 return result;
395                 //}
396             }
397             catch
398             {
399                 return default(T);
400             }
401             finally
402             {
403                 if (response != null)
404                 {
405                     response.Dispose();
406                 }
407                 if (httpClient != null)
408                 {
409                     httpClient.Dispose();
410 
411                 }
412 
413             }
414 
415         }
416 
417         /// <summary>
418         /// Post请求返回实体
419         /// </summary>
420         /// <param name="url">请求地址</param>
421         /// <param name="postData">请求数据</param>
422         /// <returns>实体</returns>
423         public static T PostResponse<T>(string url, object obj)
424         {
425             HttpClient httpClient = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip });
426             HttpResponseMessage response = null;
427             try
428             {
429                 //using (HttpClient httpClient = new HttpClient())
430                 //{
431                 httpClient.MaxResponseContentBufferSize = 256000;
432                 httpClient.DefaultRequestHeaders.Add("user-agent", userAgen);
433                 httpClient.CancelPendingRequests();
434                 httpClient.DefaultRequestHeaders.Clear();
435                 string postData = JsonConvertTool.SerializeObject(obj);
436                 HttpContent httpContent = new StringContent(postData);
437 
438                 httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
439                 T result = default(T);
440                 Task<HttpResponseMessage> taskResponse = httpClient.PostAsync(url, httpContent);
441                 taskResponse.Wait();
442                 response = taskResponse.Result;
443                 //using (HttpResponseMessage response = taskResponse.Result)
444                 //{
445                 //HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
446                 if (response.IsSuccessStatusCode)
447                 {
448                     Task<System.IO.Stream> taskStream = response.Content.ReadAsStreamAsync();
449                     taskStream.Wait();
450                     System.IO.Stream dataStream = taskStream.Result;
451                     System.IO.StreamReader reader = new System.IO.StreamReader(dataStream);
452                     string s = reader.ReadToEnd();
453 
454                     result = JsonConvertTool.DeserializeObject<T>(s);
455                 }
456                 //}
457                 return result;
458                 //}
459             }
460             catch
461             {
462                 return default(T);
463             }
464             finally
465             {
466                 if (response != null)
467                 {
468                     response.Dispose();
469                 }
470                 if (httpClient != null)
471                 {
472                     httpClient.Dispose();
473 
474                 }
475             }
476         }
477 
478 
479         /// <summary>
480         /// Put请求返回字符
481         /// </summary>
482         /// <param name="url">请求地址</param>
483         /// <param name="postData">请求数据</param>
484         /// <returns>字符</returns>
485         public static string PutResponse(string url, object obj)
486         {
487             HttpClient httpClient = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip });
488             HttpResponseMessage response = null;
489             try
490             {
491                 //using (HttpClient httpClient = new HttpClient())
492                 //{
493                 httpClient.MaxResponseContentBufferSize = 256000;
494                 httpClient.DefaultRequestHeaders.Add("user-agent", userAgen);
495                 httpClient.CancelPendingRequests();
496                 httpClient.DefaultRequestHeaders.Clear();
497                 string postData = JsonConvertTool.SerializeObject(obj);
498                 HttpContent httpContent = new StringContent(postData);
499                 httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
500                 Task<HttpResponseMessage> taskResponse = httpClient.PostAsync(url, httpContent);
501                 taskResponse.Wait();
502                 response = taskResponse.Result;
503                 //using (HttpResponseMessage response = taskResponse.Result)
504                 //{
505                 //HttpResponseMessage response = httpClient.PutAsync(url, httpContent).Result;
506                 if (response.IsSuccessStatusCode)
507                 {
508                     Task<System.IO.Stream> taskStream = response.Content.ReadAsStreamAsync();
509                     taskStream.Wait();
510                     System.IO.Stream dataStream = taskStream.Result;
511                     System.IO.StreamReader reader = new System.IO.StreamReader(dataStream);
512                     string result = reader.ReadToEnd();
513                     return result;
514                 }
515                 //}
516                 return null;
517                 //}
518             }
519             catch
520             {
521                 return null;
522             }
523             finally
524             {
525                 if (response != null)
526                 {
527                     response.Dispose();
528                 }
529                 if (httpClient != null)
530                 {
531                     httpClient.Dispose();
532 
533                 }
534             }
535         }
536 
537         /// <summary>
538         /// 将Http状态码翻译为对应的中文【暂未使用】
539         /// </summary>
540         /// <param name="code">Http状态码</param>
541         /// <returns>中文解析</returns>
542         public static string ToChsText(HttpStatusCode code)
543         {
544             switch (code)
545             {
546                 case HttpStatusCode.Continue:
547                     return "请求者应继续进行请求";
548                 case HttpStatusCode.SwitchingProtocols:
549                     return "请求者已要求服务器切换协议,服务器已确认并准备进行切换";
550                 case HttpStatusCode.OK:
551                     return "服务器成功处理了相应请求";
552                 case HttpStatusCode.Created:
553                     return "请求成功且服务器已创建了新的资源";
554                 case HttpStatusCode.Accepted:
555                     return "服务器已接受相应请求,但尚未对其进行处理";
556                 case HttpStatusCode.NonAuthoritativeInformation:
557                     return "服务器已成功处理相应请求,但返回了可能来自另一来源的信息";
558                 case HttpStatusCode.NoContent:
559                     return "服务器已成功处理相应请求,但未返回任何内容";
560                 case HttpStatusCode.ResetContent:
561                     return "服务器已成功处理相应请求,但未返回任何内容,但要求请求者重置文档视图";
562                 case HttpStatusCode.PartialContent:
563                     return "服务器成功处理了部分 GET 请求";
564                 case HttpStatusCode.MultipleChoices:
565                     return "服务器可以根据请求来执行多项操作";
566                 case HttpStatusCode.Moved:
567                     return "请求的网页已永久移动到新位置";
568                 case HttpStatusCode.Redirect:
569                     return "服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求";
570                 case HttpStatusCode.RedirectMethod:
571                     return "当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码";
572                 case HttpStatusCode.NotModified:
573                     return "请求的网页自上次请求后再也没有修改过";
574                 case HttpStatusCode.UseProxy:
575                     return "请求者只能使用代理访问请求的网页";
576                 case HttpStatusCode.Unused:
577                     return "Unused 是未完全指定的 HTTP/1.1 规范的建议扩展";
578                 case HttpStatusCode.RedirectKeepVerb:
579                     return "服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求";
580                 case HttpStatusCode.BadRequest:
581                     return "服务器未能识别请求";
582                 case HttpStatusCode.Unauthorized:
583                     return "请求要求进行身份验证";
584                 case HttpStatusCode.PaymentRequired:
585                     return "保留 PaymentRequired 以供将来使用";
586                 case HttpStatusCode.Forbidden:
587                     return "服务器拒绝相应请求";
588                 case HttpStatusCode.NotFound:
589                     return "服务器找不到请求的资源";
590                 case HttpStatusCode.MethodNotAllowed:
591                     return "禁用相应请求中所指定的方法";
592                 case HttpStatusCode.NotAcceptable:
593                     return "无法使用相应请求的内容特性来响应请求的网页";
594                 case HttpStatusCode.ProxyAuthenticationRequired:
595                     return "请求者应当使用代理进行授权";
596                 case HttpStatusCode.RequestTimeout:
597                     return "服务器在等待请求时超时";
598                 case HttpStatusCode.Conflict:
599                     return "服务器在完成请求时遇到冲突";
600                 case HttpStatusCode.Gone:
601                     return "请求的资源已被永久删除";
602                 case HttpStatusCode.LengthRequired:
603                     return "服务器不会接受包含无效内容长度标头字段的请求";
604                 case HttpStatusCode.PreconditionFailed:
605                     return "服务器未满足请求者在请求中设置的其中一个前提条件";
606                 case HttpStatusCode.RequestEntityTooLarge:
607                     return "服务器无法处理相应请求,因为请求实体过大,已超出服务器的处理能力";
608                 case HttpStatusCode.RequestUriTooLong:
609                     return "请求的 URI 过长,服务器无法进行处理";
610                 case HttpStatusCode.UnsupportedMediaType:
611                     return "相应请求的格式不受请求页面的支持";
612                 case HttpStatusCode.RequestedRangeNotSatisfiable:
613                     return "如果相应请求是针对网页的无效范围进行的,那么服务器会返回此状态代码";
614                 case HttpStatusCode.ExpectationFailed:
615                     return "服务器未满足“期望”请求标头字段的要求";
616                 case HttpStatusCode.InternalServerError:
617                     return "服务器内部遇到错误,无法完成相应请求";
618                 case HttpStatusCode.NotImplemented:
619                     return "请求的功能在服务器中尚未实现";
620                 case HttpStatusCode.BadGateway:
621                     return "服务器作为网关或代理,从上游服务器收到了无效的响应";
622                 case HttpStatusCode.ServiceUnavailable:
623                     return "目前服务器不可用(由于超载或进行停机维护)";
624                 case HttpStatusCode.GatewayTimeout:
625                     return "服务器作为网关或代理,未及时从上游服务器接收请求";
626                 case HttpStatusCode.HttpVersionNotSupported:
627                     return "服务器不支持相应请求中所用的 HTTP 协议版本";
628                 default:
629                     return "未知Http状态";
630             }
631         }
632 
633     }
634 
635 }
636 
637
View Code

MVC控制器中实现代码

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Threading.Tasks;
 5 using Microsoft.AspNetCore.Mvc;
 6 using apicore.Controllers;
 7 using Common;
 8 
 9 // For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
10 
11 namespace myfirstcore.Controllers
12 {
13     public class FristCoreController : Controller
14     {
15         private CoreApiController bll = new CoreApiController();
16         private string url = "http://localhost:55802/api/coreapi/sayhi";
17 
18         /// <summary>
19         /// 我的第一个core项目
20         /// </summary>
21         /// <returns></returns>
22         public IActionResult Index()
23         {
24             ViewData["core"] = "第一个core";
25             return View();
26         }
27 
28         public IActionResult Api()
29         {
30             NumberTo n = new NumberTo();
31             n.x = 1;
32             n.y = 2;
33             // string result=  HttpClientHelper.PostResponse(url,n);
34             string result = HttpClientHelper.GetResponse(url);
35             ViewBag.result = result;
36             return View();
37         }
38 
39         /// <summary>
40         /// 页面局部刷新
41         /// </summary>
42         /// <returns></returns>
43         public IActionResult AsyncPage()
44         {
45             return View();
46         }
47     }
48 
49     /// <summary>
50     /// 用户实体
51     /// </summary>
52     public class NumberTo
53     {
54         public int x { get; set; }
55 
56         public int y { get; set; }
57     }
58 }
View Code

请求成功后的视图页面

提醒:由于webapi不支持跨域请求,遇到跨域问题请在IIS配置api站点,并将此站点添加到host文件即可。

至此,一个基于.NET Core访问WebAPI的项目就完成了。

补充下,由于post请求无法通过url进行调试访问,这里推荐一个可视化API UI 组件Swagger

配置教程请参考:http://www.cnblogs.com/Leo_wl/p/5463839.html  

界面展示

posted @ 2016-12-01 16:53  _Jsonxu  阅读(314)  评论(0编辑  收藏  举报