初始WebApi(2)
第一部分主要介绍了什么是webapi,以及它是干什么的,怎么去调用后台数据等等。。。
今天就继续来学习一个新的知识。在上一篇文章中主要是介绍了一下如何根据根据ajax去调用后台增删改查的数据。
那么,难道我们只能针对一个表的数据进行增删改查的数据吗?比如我们要进行一个登陆操作,上传照片等等。。。改怎么去实现某一特定的业务需求呢?
第一步:创建一个loginviewmodel类
1 using system; 2 using system.collections.generic; 3 using system.linq; 4 using system.web; 5 6 namespace demo.models 7 { 8 public class loginviewmodel 9 { 10 public string loginname { get; set; } 11 public string loginpwd { get; set; } 12 } 13 }
第二步:创建user控制器
可以看到有一个[routeprefix]的标识,实际上之所以能够标识也是一个特性类的作用,并且我写了一个"api/user"的参数。
这个参数有啥用呢?
我在login方法上也做了一个[route]的标识,注意在请求时要与[route]设置的名称为主,不能和方法名为主!!!
这两个组合在一起就成了一个完整的路由,在调用时,可以手动根据我们自己创建的路由规则去调用后台的数据。
上一篇文章中存在restful语义化风格的get、post等必须要加方法名get作为前缀,不然无法访问。。。
在这里通过自定义路由规则就可以解决这个“死板”的问题了。。
1 using demo.models; 2 using system; 3 using system.collections.generic; 4 using system.linq; 5 using system.net; 6 using system.net.http; 7 using system.web.http; 8 9 namespace demo.controllers 10 { 11 //webapi:只管处理数据 12 13 //在控制器上方加一个路由前缀来确定请求的一个控制器 routeprefix prefix意为前缀 14 [routeprefix("api/user")] 15 public class usercontroller : apicontroller 16 { 17 //此处没有restful风格语义化 所以需要自己手动指定此处需要什么样的请求 18 [httppost] 19 //定义一个路由名称为 login,即routename,这时,它会和前缀组合成一个完整的路由 20 [route("login")] 21 public string login(loginviewmodel model) 22 { 23 return "ok"; 24 } 25 [httpget] 26 [route("messages")] 27 public ihttpactionresult getmessage() 28 { 29 return ok(new student() { 30 id=80, 31 name="及格了" 32 }); 33 } 34 35 } 36 37 }
例如:
html代码段部分:
这里我就只写ajax部分的代码了,其他html标签就不多赘述了。。。
主要是看url请求的地址:/api/user/login
1 <script type="text/javascript"> 2 $.ajax({ 3 url: "/api/user/login", 4 type: "post", 5 data: { 6 loginname: "admin", 7 loginpwd: "123" 8 9 } 10 <script>
当然了,它也可以作为一个对象传递给客户端。getmessage()方法里面
在这里创建了一个学生类:
1 using system; 2 using system.collections.generic; 3 using system.linq; 4 using system.web; 5 6 namespace demo.models 7 { 8 public class student 9 { 10 public int id { get; set; } 11 public string name { get; set; } 12 } 13 }
那怎么去理解ihttpactionresult呢?
ihttpactionresult:可以看到它是一个接口,接口代码:返回结果是httpresponesmessage的任务。我可不可以认为这是后台数据在传递到客户端是,返回的状态码?一个状态码代表一个返回结果。
比如
return ok() 状态码:200
notfound() 状态码:404
return internalservererror(new exception("你错了")) 状态码:500
实际上这些方法都只能在ihttpactionresult中实现的。
想想接口中一般是有一个类,几个方法
如果需要验证的话可以去试试f12看看network里面是否该方法对应了自己的状态码
正是该方法实现了该接口,所有才可以进行处理。
那么这里需要注意的是只有 return ok(),才能带数据到客户端。。。
1 using system.net.http; 2 using system.threading; 3 using system.threading.tasks; 4 5 namespace system.web.http 6 { 7 // 8 // 摘要: 9 // 定义一个用于以异步方式创建 system.net.http.httpresponsemessage 的命令。 10 public interface ihttpactionresult 11 { 12 // 13 // 摘要: 14 // 以异步方式创建 system.net.http.httpresponsemessage。 15 // 16 // 参数: 17 // cancellationtoken: 18 // 要监视的取消请求标记。 19 // 20 // 返回结果: 21 // 在完成时包含 system.net.http.httpresponsemessage 的任务。 22 task<httpresponsemessage> executeasync(cancellationtoken cancellationtoken); 23 } 24 }
user控制器:在这里的请求方式是get,因为做了一个[httpget]的标识
1 using demo.models; 2 using system; 3 using system.collections.generic; 4 using system.linq; 5 using system.net; 6 using system.net.http; 7 using system.web.http; 8 9 namespace demo.controllers 10 { 11 //webapi:只管处理数据 12 13 //在控制器上方加一个路由前缀来确定请求的一个控制器 routeprefix prefix意为前缀 14 [routeprefix("api/user")] 15 public class usercontroller : apicontroller 16 { 17 //此处没有restful风格语义化 所以需要自己手动指定此处需要什么样的请求 18 [httppost] 19 //定义一个路由名称为 login,即routename,这时,它会和前缀组合成一个完整的路由 20 [route("login")] 21 public string login(loginviewmodel model) 22 { 23 return "ok"; 24 } 25 [httpget] 26 [route("messages")] 27 public ihttpactionresult getmessage() 28 { 29 return ok(new student() { 30 id=80, 31 name="及格了" 32 }); 33 } 34 35 } 36 }
上一篇: NullPointerException: Attempt to invoke virtual method ‘android.content.res.XmlResourceParser androi
下一篇: Android扫一扫 有仿微信版
推荐阅读
-
O2O为何进入寒冬?世上本没有寒冬,作的人多了也就成了寒冬
-
在ubuntu18.04版本安装vscode(2种)
-
使用maven+eclipse搭建struts2开发环境
-
Mac item2常用快捷键是什么?iterm2 快捷键大全
-
Android编程实现拍照功能的2种方法分析
-
大前端的自动化工厂(2)—— SB Family
-
pow函数(数学次方)在c语言的用法,两种编写方法实例( 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值)
-
teamviewer一直显示初始化参数该怎么办?
-
小米全面屏电视Pro共3款机型:全系2+32大存储
-
《ServerSuperIO Designer IDE使用教程》-2.与硬件网关数据交互,并进行数据级联转发,直到云端。发布:v4.2.1版本