基于.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
MVC控制器中实现代码
请求成功后的视图页面
提醒:由于webapi不支持跨域请求,遇到跨域问题请在IIS配置api站点,并将此站点添加到host文件即可。
至此,一个基于.NET Core访问WebAPI的项目就完成了。
补充下,由于post请求无法通过url进行调试访问,这里推荐一个可视化API UI 组件Swagger
配置教程请参考:http://www.cnblogs.com/Leo_wl/p/5463839.html
界面展示