MVC+WebApi+Restful
Restful四个关键字 Get,Post,Put,Delete,这是重点!
创建一个WebApi,MVC模式
路由配置文件,跟Web的不是一个文件,要注意。
defaults里的默认控制器是我随手加的,对于api来说不应该有默认,要什么就给什么。
默认控制器ValueController中有
GetGetGetGetGetGetGetGetGetGetGetGetGetGetGetGetGetGetGetGetGetGetGetGetGetGetGet
无参和有一个参数的方法,根据是否传参数来确定调用谁。
在Models中建一个学生类
新建一个控制器Student
/Api/Student 访问这个控制器会返回json格式的student对象数据,很简单。
添加Action
/Api/Student/7 这样访问时会调用这个方法。为啥会找到这个id呢,因为路由配置文件里的规则中写的是id,如果我改成age
Get方法的参数名也改成age
依然可以找到这个方法,如果两边不一致,则不会,这时需要通过get方式请求。
想访问到这个方法,需要Api/Student?name=hello这么请求
多个参数的话,可以一直累加参数
对应的是 Api/Student?name=hello&Age=4
需要注意的是,每个Get方法都是重载,需要注意重载规则。
那每个方法都叫Get,岂不是很不直观,无法望文生义?不是这样的。
可以 /Api/Student?address=中国北京 这样访问
Action的名字叫GetAddress,也能正常访问到,这说明,Action的重点是,"Get"这个字符串啊!
不信我把最开始的无参Get改成
用/Api/Student照样能访问。
Post
基本一样,控制器中写一个Post
public string Post(Student student) { return student.Name; }
随手写个html页面,用ajax模拟post提交
<body> <script> $.ajax({ url: "/Api/Student?address=地址", type: "get", }).done(function (data) { alert(data); }) $.ajax({ url: "/Api/Student", type: "post", data: { Id: 1, Name: "张三", Grade: 6 } }).done(function (data) { alert(data); }).fail(function (err) { alert("失败了"); }) </script> </body>
这样就能正常访问到这个Action
Put
控制器
public string Put(int Id,Student student) { return "Id:" + Id + ",student:" + student.Name + "-" + student.Id; }
入参既有int,又有student对象,怎么请求呢?
$.ajax({ url: "/Api/Student/13", type: "put", data: { Id: 1, Name: "张三", Grade: 6 } }).done(function (data) { alert(data); }).fail(function (err) { alert("失败了"); })
很简单,各管各的,即使int Id和student对象中的Id重名,也能区分开。
输出 Id:13,student:张三-1
如果再加一个入参Name,就把
url: "/Api/Student/13", 改成
url: "/Api/Student/13?Name=李四",这样就行了。
Delete
跟上面没啥区别就不说了。
需要注意的是,Restful风格并不适用所有场景,有些业务逻辑情况下,你会发现,哪一种方法都不好用,例如Login,你说你用Get还是Post呢?
所以,我们可以重新定义路由规则,不走restful风格。
写一个新的控制器User
[RoutePrefix("Api/User")] public class UserController : ApiController { [HttpPost] [Route("Login")] public string Login(Student student) { return "登录"; } }
[RoutePrefix("Api/User")] 用来定义整个User控制器的访问格式。
[Route("Login")]则是定义某个Action
这里也可以写成
[Route("Api/User/Login")],这样外层控制器那里可以不写。
[HttpPost]是因为Login本身不属于Restful的任何一种风格,所以我指定只能post调用。
原文地址:https://www.cnblogs.com/luyShare/p/11386281.html
- What is "Type" in managed heap?
- 一个特殊场景的 LR 预测优化 Trick
- 你知道Unity IoC Container是如何创建对象的吗?
- 发布一个锁定行列的一种方法。(实现Excel里的冻结窗格的功能)
- IoC+AOP的简单实现
- 使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]
- OO——从不知到知道一点,从迷茫到豁然开朗 (迟来的我的2002到2007)
- 只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题
- TEST LAB V8在线渗透实验室教程(三)
- CMQ请求域名
- 在Entity Framework中使用存储过程(一):实现存储过程的自动映射
- 在Entity Framework中使用存储过程(二):具有继承关系实体的存储过程如何定义?
- 表单控件的副产品——查询控件
- 表单控件续(1)——应用接口来简化和分散代码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 自定义加载动画Dialog弹窗
- Android 天气APP(十一)未来七天的天气预报、逐小时预报、UI优化
- Android 天气APP(十)继续优化、下拉刷新页面天气数据
- Activity 活动跳转(Java&Kotlin)
- Android 天气APP(九)细节优化、必应每日一图
- Android CheckBox修改选中颜色并去除选中时的水波纹效果
- 绘制带回归线的散点图
- Java&Android像素px、dip转换工具类
- Android WIFI是否连接,网络状态监测工具类
- Kotlin学习日志(五)类与对象
- Android 应用横屏运行
- Android 修改EditView输入框的光标颜色
- Android控件显示、隐藏时,增加动画效果
- Android 自定义样式Shape
- 倒计时工具类