之前在公司用的是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返回所有数据。
{
"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 |
这里的返回参数和请求参数就简单的以一张用户表为例,当然这里阉割过了。具体看演示好了。
至此,我们创建完了基于C#的Web API项目,接下来我们就一个一个搞吧 。
这里它原生的请求响应格式是带微软风格的xml格式,项目创建完后,会在Controllers文件夹下创建一个ValuesController.cs文件,ValuesContoller继承了ApiContoller,所以这里它对应的请求格式就是你项目的地址加上“/api/values”这个样子,以“春娇”与“志明”为例,访问该路径的Get请求的实现方法如下,返回了一个string类型的数组。
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "春娇", "志明" };
}
但是很多场景,后面都是带一屁股参数的,像百度搜索,这个的话,在它后面加相应的参数就好了,如果方法是void的话,就是没有返回值的,前台那边接收到的是204的响应码。
// GET api/values/5
public string Get(int id)
{
return id.ToString();
}
这里的话,以一言的API为例,一言就是一句话的意思。通过请求“/api/hitokoto”来返回所以的数据,通过“api/hitokoto?id=1"这种来返回单独的一项。
首先我们创建一个一言类,数据么就不要求做的逼真了,就是意思下,具体的如下:
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为例。
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进行显示相应的内容。这个跟楼上特别相似,就是在它后面加参数,然后通过获取的参数,返回对应的数据,具体的如下。
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();
}
}
这里以第二条为例,具体的打开姿势如下。
这里以网易云音乐热评为例,就不重新创建一个Controller了,直接写到HomeController下了。然后这边的话,其实HomeController你可以看成是一个MVC模式,是完全一样的。所以这边就用MVC写接口的方法来写了,这IHttpActionResult其实是ActionResult来的。所以这里就用这个,然后通过Content把它以文本的方式返回给前台。
public ActionResult hot_netease_music_comment()
{
return Content("我一个朋友说他准备移民澳大利亚,手续基本都办完了,只要他签上最后的名字,然后去拍照片办户口就成华侨了。在这之前他去海边散心,看到沙滩上有人写的 最美最好是中国, 这一行字有一部分已经被海水冲淡了,但是还是能看出来,我朋友这会脑海里就出现这个旋律,两天后就回国了。对,其实是我本人<br/></br>------ 《我爱你中国(小提琴)》");
}
显示的效果如下:
这里的话,首先我们需要创建一个视图页,首先我们需要在HomeController下创建一个ActionResult的inputForm方法,具体的如下,它所表示的是,当你请求对应的Controller以及方法,就给你返回相应的视图。
public ActionResult inputForm()
{
ViewBag.Title = "一个表单请求的例子";
return View();
}
这里inputForm()点一下,然后右键添加视图,就OK了。
对应的前台页面是用Bootstrap写的,具体的如下:
<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就是用来表示前台传过来的多参的,具体的实现如下:
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返回的部分问题,最后梳理成脑图就是这个样子,后续,我们一步步把这张脑图完善起来。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有