一、前言

      工作也有一年多了,从进入公司就一直进行BIM(建筑信息模型)C/S产品的研发,平时写的最多的就是Dev WPF。一个偶然的时机,产品需要做支付宝扫码与微信扫码,所以需要了解产品服务器中的授权服务是如何编写的,以此开始接触Web。本篇将以小白的视角学习Webapi,老司机可以直接略过。

二、Webapi编写

        Step1:  编写WebApiConfig.cs,这个不用多说,就是设置路由嘛。

 public static class WebApiConfig{public static void Register(HttpConfiguration config){config.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{action}/{id}",defaults: new { id = RouteParameter.Optional });}}

Step2:  在Global.asax文件中初始化路由映射。

public class MvcApplication : System.Web.HttpApplication
{protected void Application_Start(){AreaRegistration.RegisterAllAreas();WebApiConfig.Register(GlobalConfiguration.Configuration);}
}

Step3:  创建controller,编写Api具体服务。

public class TestController: ApiController
{[HttpGet]       public string ConnectionTest()       {            return "connected_success";       }

       [HttpPost]       public HttpResponseMessage GetInfo(string value1, string value2)       {                       var info = new Info()            {               Property1 = value1,               Property2 = value2,               Property3 = "3"            };            HttpResponseMessage response = new HttpResponseMessage            {                StatusCode = HttpStatusCode.OK,                Content = new StringContent(JsonConvert.SerializeObject(info), Encoding.GetEncoding("UTF-8"),"application/json")            };            return response;      }
}

这样,一个简单的实例就编写好了。根据之前的路由映射规则:"api/{controller}/{action}/{id}",我们的访问地址就是:http://xxx.xxx.com:xxx/api/Test/GetName

三、Webapi的请求

       api写完了,总要去请求这个api服务的吧,那么我们得首先明白HttpGet与HttpPost两种请求方式的区别。从字面上来说,Get是获取,Post是投递、推送的意思。结合其它资料我觉得以下解释还是比较容易理解的:

下面就是两种请求方式的写法,包括前台与后台的写法。前台以ajax,后台就是C#。

         Method1: Get请求写法

         前台Get请求写法:

//无参数
$.ajax({url: "/api/controllerName/ActionNametype: "GET",success: function (data){//
    }
})//带参数
$.ajax({url: "/api/controllerName/ActionNametype: "GET",data:{"property1":value1,"property2":value2},success: function (data){//
    }
})或者$.ajax({url: "/api/controllerName/ActionName/?property1="+value1+"&property2="+value2,type: "GET",             success: function (data) {//
    }
})

后台Get请求写法:

public static void TestGet(string serverAddress)
{     try{HttpClient httpsClient = new HttpClient{BaseAddress = new Uri(serverAddress),Timeout = TimeSpan.FromMinutes(20)};if (DsClientOperation.ConnectionTest(httpsClient)) //这里是连接测试判断,可根据业务自行调整
         {                       stringGetUrl = httpsClient.BaseAddress + "api/ControllerName/ActionName"; //若带参,参数写在url里,例:xxx.com?order=参数1Uri address = new Uri(PostUrl);Task<HttpResponseMessage> response = httpsClient.GetAsync(address);response.ContinueWith((getTask) =>{if (getTask.IsFaulted){throw getTask.Exception;}HttpResponseMessage getResponse = getTask.Result;getResponse.EnsureSuccessStatusCode();var result = getResponse.Content.ReadAsStringAsync().Result;                                return result;});}}catch{}
}

 public static bool ConnectionTest(string serverAddress){if (string.IsNullOrEmpty(serverAddress)) return false;HttpClient httpClient = new HttpClient{BaseAddress = new Uri(serverAddress),Timeout = TimeSpan.FromSeconds(30)};Uri address = new Uri(httpClient.BaseAddress + "api/Test/ConnectionTest");Task<HttpResponseMessage> task = httpClient.GetAsync(address);try{          task.Wait();}catch{return false;}HttpResponseMessage response = task.Result;if (!response.IsSuccessStatusCode)return false;string connectionResult;try{var result = response.Content.ReadAsStringAsync().Result;connectionResult = JsonConvert.DeserializeObject<string>(result);}catch{return false;}return connectionResult.Equals("connected_success");}

Method2: Post请求写法

前台Post请求写法:

//无参数
 $.ajax({url: "api/ControllerName/ActionName",type: "Post",        success: function (data) {}});//有1个参数   $.ajax({         url: "api/ControllerName/ActionName",  type: "Post", dataType: "json", contentType: "application/json", data:{"":value1},  success: function (data) { } }); 

//有2个参数
 $.ajax({url: "api/ControllerName/ActionName",type: "Post",   dataType: "json",        contentType: "application/json",data:JSON.stringify({"property1":value1,"property2":value2}), success: function (data) { } });
//再多的话要封装成对象进行传输了最重要的是Action里的参数有[FromBody]标签,并且FromBody只能写一次
[HttpPost]public HttpResponseMessage Action([FromBody]dynamic yourparameter)
[HttpPost]public HttpResponseMessage Action([FromBody]JObject yourparameter)

后台Post请求写法:

public static void TestPost(string productName, string serverAddress)
{     var productName = "Your Product";var requestCode = "Your Number"; var clientDictionary = new Dictionary<string, string>{{"ProductName", productName},{"RequestCode", requestCode},};var packageInfo = JsonConvert.SerializeObject(clientDictionary);if (!string.IsNullOrEmpty(packageInfo)){try{HttpClient httpsClient = new HttpClient{BaseAddress = new Uri(serverAddress),Timeout = TimeSpan.FromMinutes(20)};if (DsClientOperation.ConnectionTest(httpsClient)) //这里是连接测试判断,可根据业务自行调整{StringContent strData = new StringContent(packageInfo,Encoding.UTF8,"application/json");string PostUrl = httpsClient.BaseAddress + "api/ControllerName/ActionName";Uri address = new Uri(PostUrl);Task<HttpResponseMessage> response = httpsClient.PostAsync(address, strData);response.ContinueWith((postTask) =>{if (postTask.IsFaulted){throw postTask.Exception;}HttpResponseMessage postResponse = postTask.Result;postResponse.EnsureSuccessStatusCode();var result = postResponse.Content.ReadAsStringAsync().Result;                                return result;});}}catch{}}}

四、结尾

       大致就写到这里,如果有写错的地方可以在评论区留言,下一篇玩玩其它的,继续以小白视角研究研究MVC。

转载于:https://www.cnblogs.com/lovecsharp094/p/7617222.html

【WebAPI】新手入门WebAPI相关推荐

  1. 《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)

        新手入门:C/C++中枚举类型(enum) 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型.之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来. ...

  2. LINUX新手入门-1.装系统

    LINUX新手入门-1.装系统 首先我们用虚拟机模拟 装linux系统,然后下一步下一步,然后完成后,编辑一些设置,把镜像放上面就可以了 选第一项,安装系统,查看镜像是否能运行,直接跳过,选择语言 和 ...

  3. 人工智能新手入门学习路线!附学习资源合集

    有段时间没跟大家分享编程资源福利了!今天为大家整理了人工智能新手入门学习路线,同时附700分钟的学习资源合集,相信这套福利可以帮你顺利入行AI!文末领取全部资料. 一.AI基础好课学习资料整理(约31 ...

  4. 【LaTeX】E喵的LaTeX新手入门教程(4)图表

    这里说的不是用LaTeX画图,而是插入已经画好的图片..想看画图可以把滚动条拉到底.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇  [LaTeX]E喵的LaTeX新手入门教程(2)基 ...

  5. 想学python都要下载什么软件-学编程闲余时间建议下载的软件_Python新手入门教程...

    原标题:学编程闲余时间建议下载的软件_Python新手入门教程 Python新手入门教程_在手机上就能学习编程的软件 很多小伙伴会问:我在学编程,想利用坐地铁坐公交吃饭间隙学编程,在手机上能学编程的软 ...

  6. 编程入门python语言是多大孩子学的-不学点编程,将来怎么给孩子辅导作业―Python新手入门教程...

    为了填满AI时代的人才缺口,编程语言教育都从娃娃抓起了!如果你还不懂Python是什么将来怎么给孩子辅导作业呢? Python新手入门教程 近期,浙江省信息技术课程改革方案出台,Python言语现已断 ...

  7. python2好还是python3好-新手入门选择Python2还是Python3

    1. 前言 Python的发展很快,几乎每年都在版本迭代.目前Python有两个主要版本,一个是python2.x,另一个是python3.x. 兔子先生最早接触Python的时候,使用的是pytho ...

  8. python新手入门-python新手入门方法

    随着人工智能 大数据的火热 Python成为了广大科学家和普通大众的学习语言.在学习Python的过程中 有很多人感到迷茫 不知道自己该从什么地方入手,今天我们就来说一些新手该如何学习Python编程 ...

  9. 【LaTeX】E喵的LaTeX新手入门教程(6)中文

    假期玩得有点凶 ._.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇  [LaTeX]E喵的LaTeX新手入门教程(2)基础排版  [LaTeX]E喵的LaTeX新手入门教程(3)数学 ...

最新文章

  1. 可高效训练超大规模图模型,PyTorch BigGraph是如何做到的?
  2. Docx4j 添加页码
  3. 反激式开关电源变压器设计
  4. Introduction to PostGIS 之线性参考、地理编码
  5. 【开发环境】Windows 安装 PyCharm 开发环境 ( 下载 PyCharm | 安装 PyCharm | 在 PyCharm 中创建 Python 工程 )
  6. MySQL加索引语句不加锁:ALGORITHM=INPLACE, LOCK=NONE
  7. 《javaScript100例|04》自动播放——Js幻灯片缓冲效果
  8. 拆解食饮新消费品牌的增长密码
  9. PHP笔记-AES加解密(PHP7)
  10. 工具杂记-notepad++正则表达式匹配替换
  11. UVALive 5000 Underwater Snipers --二分
  12. windows 画图工具 —— mspaint 的使用
  13. 简述RHEL7新特性(二)
  14. tinygrad ->要求python3.8以上
  15. Docker容器内安装wkhtmltox用来html转pdf
  16. Win11 开机资源管理器频繁崩溃闪退怎么处理?
  17. java 中long和Long的区别
  18. linux底层把值传给上层,Android上层如何调用一个底层函数
  19. pb中操作excel表格函数
  20. 测试用例编写练习(二)

热门文章

  1. 机器学习零基础初学者入门
  2. P(A|B)和P(AB)有什么区别
  3. 石大远程在线考试——《大地构造学》在线考试
  4. 五金模具设计试模问题修正方案你知道吗
  5. 剖析桌面化 Android 操作系统的发展与未来
  6. 如何快速成为一个游戏测试工程师(配教程)
  7. Android安卓手机3389远程连接电脑桌面教程
  8. iphone怎么投屏到mac上 iphone投屏到mac方法
  9. Google Play约会游戏开发者,ChinaJoy 2017完美收官!
  10. 简约素雅公司企业简介PPT模板