前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用C#写接口是一种什么样的体验

用C#写接口是一种什么样的体验

作者头像
江涛学编程
发布2020-06-19 16:25:50
2K0
发布2020-06-19 16:25:50
举报
文章被收录于专栏:江涛的博客江涛的博客

之前在公司用的是mvc那个创建的项目用来写接口,今天回来电脑上搞了一下,发现还有API这种的直接创建啊,那就探索下吧。

数据的收发格式

长这么大,好像看到过的数据收发格式不外乎这几种,像微信用的是XML格式的文件进行数据的交互,然后当下开发用的最多的还是JSON格式,普普通通的在线卑微,那只有文本了,哈哈。

前期工作

为啥写接口呢?,闲着没事干瞎倒腾不行嘛!谈起从业生涯写接口的历史,要追溯到去年夏季,在实习期间遇到的一位超好的大哥,在他的带领下,一起参与开发过基于Node.JS后台接口的项目。也让我懂得了很多,真的很感谢他!

先说下观点,我认为用Node.JS写接口是世界第一的,若不是工作需要,我是不高兴去学C#写接口的,不接受反驳,没错,我们Javascript就是可以为所欲为进行前后端开发,脚本之王不是盖的。用了这个以后发现,也蛮香的吼,一个好处是它支持https的访问,可以做一些基于https做的事情,不过VS运行项目他都是本地的,也就是你外网和内网无法访问,可能设置下参数瞎倒腾内网也可以访问吧;第二个就是它可以在线生成文档,当然这个其实不算优势,倒腾下其他语言也有吧。

下面我们先说下网络请求方式,不外乎这几种。GET就是你打开浏览器访问页面的方式啦,用GET请求的话它这个大小是有个限制的,这个取决于浏览器了一般是2kb-8kb这个样子,你请求的参数会在浏览器显示;POST请求的话,我只能用来描述了,但凡正经的公司组织,他让你填写的表单就是一个POST接口的例子,然后想想传文件啊,不会那么想不开就GET吧,你可以把它理解成是数据的加密传输,但不等同于。然后PUT的话一般用于更新数据用的,Delete的话,顾名思义就是删除数据用的,常用的就这么几个,但是好像碰到过一些项目,全给我用POST进行增删改查,可以肯定的是,这绝对不是我们Node.JS程序员写的。

那么,我们今天基于楼上的东西,来简单地创建一些API,这里为了能够体现简单,我们不要求操作数据库了,也不搞Token了,返回格式也不作严格的要求,就搞下POST和GET ,就是意思下,后面的域名地址我就用ataolaAPI代替了。

基于GET请求的返回JSON格式的示例,一个一言API的例子,具体如下:

内容

说明

接口地址

{ataolaAPI}/api/hitokoto

返回格式

JSON

请求方式

GET

请求示例

{ataolaAPI}/api/hitokoto?id=1

由于就是意思下,所以就不写参数列表了,就是通过它后面的GET的参数来显示对应的内容。

返回参数也意思下,直接贴JSON好了,默认{ataolaAPI}/api/hitokoto返回所有数据。

代码语言:javascript
复制
{
  "id": 1,
  "hitokoto": "心若不动,风又奈何",
}

基于GET请求的返回XML格式的示例,这个是它的特色,它创建完项目默认就是这个格式。

内容

说明

接口地址

{ataolaAPI}/api/values

返回格式

xml

请求方式

GET

请求示例

{ataolaAPI}/api/values

基于GET请求的返回文本格式的示例。

内容

说明

接口地址

{ataolaAPI}/home/hot_netease_music_comment

返回格式

text

请求方式

GET

请求示例

{ataolaAPI}/home/hot_netease_music_comment

返回格式就是一段文本啊,没啥好的了。

基于POST请求的返回JSON格式的示例。

内容

说明

接口地址

{ataolaAPI}/api/values

返回格式

JSON

请求方式

POST

请求示例

{ataolaAPI}/api/values

这里的返回参数和请求参数就简单的以一张用户表为例,当然这里阉割过了。具体看演示好了。

具体实现

第一步:创建一个在线卑微的.NET项目,具体看楼下,多图预警。

至此,我们创建完了基于C#的Web API项目,接下来我们就一个一个搞吧 。

第二步:项目原生的返回格式xml初探

这里它原生的请求响应格式是带微软风格的xml格式,项目创建完后,会在Controllers文件夹下创建一个ValuesController.cs文件,ValuesContoller继承了ApiContoller,所以这里它对应的请求格式就是你项目的地址加上“/api/values”这个样子,以“春娇”与“志明”为例,访问该路径的Get请求的实现方法如下,返回了一个string类型的数组。

代码语言:javascript
复制
   // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "春娇", "志明" };
        }

但是很多场景,后面都是带一屁股参数的,像百度搜索,这个的话,在它后面加相应的参数就好了,如果方法是void的话,就是没有返回值的,前台那边接收到的是204的响应码。

代码语言:javascript
复制
 // GET api/values/5
        public string Get(int id)
        {
            return id.ToString();
        }
第三步:通过GET请求接口,返回JSON格式的示例

这里的话,以一言的API为例,一言就是一句话的意思。通过请求“/api/hitokoto”来返回所以的数据,通过“api/hitokoto?id=1"这种来返回单独的一项。

首先我们创建一个一言类,数据么就不要求做的逼真了,就是意思下,具体的如下:

代码语言:javascript
复制
 public class Hito
    {
        public int id { get; set; }
        public string hitokoto { get; set; } 
    }

它这边后台的实现如下,与MVC不同的是,MVC是你进入到那个Contoller下,然后方法对应相应的路径,但是这里不是这样子的,它默认就是访问到你的controller,所以这里就不是”/api/hitokoto/getHitokotoAll"了,而是“api/hitokoto",这里先创建一个Hito的List泛型,然后往里面塞数据,最后的话返回JSON格式,其中IHttpActionResult类型里面,它可以是Json(t content)、OK()、OK(t content)、NotFound()、Content(HttpStatusCode statusCode, T value)、BadRequest()以及Redirect(string location),这里以Json为例。

代码语言:javascript
复制
public IHttpActionResult getHitokotoAll()
        {
            List<Hito> resHito = new List<Hito>();
            resHito.Add(new Hito { id = 1, hitokoto = "往事如烟,悲如喜" });
            resHito.Add(new Hito { id = 2, hitokoto = "爱就像蓝天白云,晴空万里,突然暴风雨。" });
            resHito.Add(new Hito { id = 3, hitokoto = "在一瞬间有一百万个可能,该向前走,或者继续等。" });
            resHito.Add(new Hito { id = 4, hitokoto = "你存在,我深深的脑海里,我的梦里,我的歌声里。" });
            resHito.Add(new Hito { id = 5, hitokoto = "当一艘船沉入海底,当一个人成了迷,我不知道,他们为何离去,这声再见,竟是最后一句。" });
            resHito.Add(new Hito { id = 6, hitokoto = "我嫉妒你的爱气势如虹,像个人气高居不下天后" });
            return Json(resHito);
        }

效果是这样子的:

然后我们需要做的是,让他根据url后面对应的ID进行显示相应的内容。这个跟楼上特别相似,就是在它后面加参数,然后通过获取的参数,返回对应的数据,具体的如下。

代码语言:javascript
复制
 public IHttpActionResult getHitokotoById(int id)
        {
            List<Hito> resHito = new List<Hito>();
            resHito.Add(new Hito { id = 1, hitokoto = "往事如烟,悲如喜" });
            resHito.Add(new Hito { id = 2, hitokoto = "爱就像蓝天白云,晴空万里,突然暴风雨。" });
            resHito.Add(new Hito { id = 3, hitokoto = "在一瞬间有一百万个可能,该向前走,或者继续等。" });
            resHito.Add(new Hito { id = 4, hitokoto = "你存在,我深深的脑海里,我的梦里,我的歌声里。" });
            resHito.Add(new Hito { id = 5, hitokoto = "当一艘船沉入海底,当一个人成了迷,我不知道,他们为何离去,这声再见,竟是最后一句。" });
            resHito.Add(new Hito { id = 6, hitokoto = "我嫉妒你的爱气势如虹,像个人气高居不下天后" });
            if(id >0 && id <7)
            {
                return Json(resHito[id - 1]);
            }else
            {
                return NotFound();
            }
            
        }

这里以第二条为例,具体的打开姿势如下。

第四步:通过Get请求接口,返回文本格式的示例

这里以网易云音乐热评为例,就不重新创建一个Controller了,直接写到HomeController下了。然后这边的话,其实HomeController你可以看成是一个MVC模式,是完全一样的。所以这边就用MVC写接口的方法来写了,这IHttpActionResult其实是ActionResult来的。所以这里就用这个,然后通过Content把它以文本的方式返回给前台。

代码语言:javascript
复制
 public ActionResult hot_netease_music_comment()
        {
            return Content("我一个朋友说他准备移民澳大利亚,手续基本都办完了,只要他签上最后的名字,然后去拍照片办户口就成华侨了。在这之前他去海边散心,看到沙滩上有人写的 最美最好是中国, 这一行字有一部分已经被海水冲淡了,但是还是能看出来,我朋友这会脑海里就出现这个旋律,两天后就回国了。对,其实是我本人<br/></br>------ 《我爱你中国(小提琴)》");
        }

显示的效果如下:

第四步:通过POST请求接口,实现表单的提交

这里的话,首先我们需要创建一个视图页,首先我们需要在HomeController下创建一个ActionResult的inputForm方法,具体的如下,它所表示的是,当你请求对应的Controller以及方法,就给你返回相应的视图。

代码语言:javascript
复制
     public ActionResult inputForm()
        {
            ViewBag.Title = "一个表单请求的例子";
            return View();
        }

这里inputForm()点一下,然后右键添加视图,就OK了。

对应的前台页面是用Bootstrap写的,具体的如下:

代码语言:javascript
复制

<h2 style="text-align:center">注册了吗</h2>


<div class="baba">
    <form action="/api/values" method="post">
        <div class="form-group">
            <label for="username">UserName</label>
            <input type="text" class="form-control" id="username" name="username" placeholder="Enter Username">
        </div>
        <div class="form-group">
            <label for="password">Password</label>
            <input type="password" class="form-control" id="password" name="password" placeholder="Enter Password">
        </div>
        <div class="form-group">
            <label for="phone">Phone</label>
            <input type="text" class="form-control" id="phone" name="phone" placeholder="Enter Phone">
        </div>
        <div class="form-group">
            <label for="email">Email address</label>
            <input type="email" class="form-control" id="email" name="email" placeholder="Enter email">
        </div>

        <div class="form-group">
            <label for="address">Address</label>
            <input type="text" class="form-control" id="address" name="address" placeholder="Enter Address">
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
    </form>
</div>

接口的话,这边我为了意思下,就写在了ValuesController下,这里除了dynamic和JObject的话,前面都讲过了,dynamic就是创建动态类型,我也不知道里面是啥,那就是dynamic,或者确切的说,里面不止一种类型,你就给我塞dynamic;JObject就是用来表示前台传过来的多参的,具体的实现如下:

代码语言:javascript
复制
public IHttpActionResult Post([FromBody]JObject obj)
        {
            string uname = obj["username"].ToString();
            string pwd = obj["password"].ToString();
            string phone = obj["phone"].ToString();
            string email = obj["email"].ToString();
            string address = obj["address"].ToString();
            return Json((dynamic)(new { username = uname, password = pwd, phone = phone, email = email, address = address })) ;
        }

然后我们进行测试一下吧。

最后的话,我把它放到了我的腾讯云服务器上供大家体验下,具体的地址可能很多人也看到了,是http://47.234.189.222.

这年头,小学生真多,连我的学生机都不放过,拜托你DDOS的话认真一点,我的是IIS服务器,不是Apache,你给我整那么多个php的404做甚。

至此我们解决关于c#创建Web项目的API返回的部分问题,最后梳理成脑图就是这个样子,后续,我们一步步把这张脑图完善起来。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 江涛学编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据的收发格式
  • 前期工作
  • 具体实现
    • 第一步:创建一个在线卑微的.NET项目,具体看楼下,多图预警。
      • 第二步:项目原生的返回格式xml初探
        • 第三步:通过GET请求接口,返回JSON格式的示例
          • 第四步:通过Get请求接口,返回文本格式的示例
            • 第四步:通过POST请求接口,实现表单的提交
            相关产品与服务
            云服务器
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档