.net WebApi
webapi2:给前端提供数据的框架
Restful(语义)的数据提供方式:
Get(查)从服务器获取
Post(增)发送到服务器
Put(改)修改
Delete(删)删除
- MVC控制器:Controller
- API控制器:ApiController
返回值类型自动识别处理,可以返回对象和对象数组,列出成员
WebApiConfig.cs设置api的路由:
- 路由name不能重复
- routeTemplate不加api前缀会与MVC路由冲突
- 没有默认值:api是用来传输数据的,没有默认数据一说
Restful(语义)方式传输数据,action方法需要带对应的关键字(get、post等),例如GetAddress()可以,Address()不行
简单数据(id,name等)可以用url传参,post、put提交对象数据需要data提交
非Restful风格:
路由前缀[RoutePrefix("(控制器路径)")]为控制器下的每个方法添加一个内容为控制器路径的前缀
需要自己指定处理类型,例[HttpPost] 手动定义路由名[Route("(方法路由名)")]
完整示例:
[RoutePrefix("控制器路径")]
控制器:ApiController
{[HttpPost]//还有[HttpGet]等特性,注明此action只能通过POST方法调用[Route("方法路由名")]行为方法(类型 参数){...}
}
- 方法路由名与方法名不一定一致,以路由名为主
- 行为方法的参数类型前可以加上[FromBody]限制,如:行为方法([FromBody]类型 参数)
[FromBody]
注明参数只能从Post请求体(body)中获取,FromBodyAttribute强制要求被其修饰的参数,必须是序列化后的实体成员。[FromBody]在一个方法中只能修饰一个参数。
- 如果客户端Content-Type是application/json, api接口如果是用单个对象做参数的时候,加或者不加[FromBody]都可以正常解析参数,但是接口是用对象列表做参数时候,则必须加[FromBody],否则读取不到参数。
- 如果客户端Content-Type不是application/json,api接口必须加[FromForm],否则客户端调用接口会报400错误。
- 如果加上[FromBody],客户端Content-Type不是application/json,接口会报400错误。
WebAPI请求
对于前端页面发起的get/post请求作出相应的处理,前端使用JQuery发起异步请求实现数据调用
一、Get请求
通过url传参
1. 无参数的Get请求
一般的 get 请求我们可以使用 jquery 提供的 $.get() 或者 $.ajax({type:“get”}) 来实现,在url中是拼接在url最后的以?开始的部分
后台方法示例:
public 返回值类型 GetAction(){...}
返回值类型可以是基本数据类型,也可以是类、List集合等等
2. 传递一个参数的Get请求
通常我们需要传递参数只需要指定 ajax 方法的 data 属性即可: data:{“name”:“赵大宝”}
后台方法示例:
public 返回值类型 GetAction(string name){...}
3. 传递多个参数的Get请求
按照上面的方法,对于多个参数我们可以很容易就写出来: data:{“name”:“赵大宝”,“age”:12}
后台方法示例:
public 返回值类型 GetAction(string name,string age){...}
二、Post请求
通过RequestBody传参
1. 无参数的Post请求
我们可以使用 $.post() 或 $.ajax({type:“post”}) 来发起 post 请求
后台方法示例:
public 返回值类型 PostAction(){...}
2. 传递一个参数的 Post 请求
前端data不用key=value而是=value。将key设置为空,如data:{""="赵大宝"}
;或者传一个单纯的字符串由后台去解析,如data:'"name=张三,age=21"'
用单引号包一个双引号,双引号里为字符串内容
后台方法示例:
public 返回值类型 PostAction([FromBody] string name){...}
3. 传递多个参数的Post请求
三种方法
前端:
$.ajax({url: "/api/student/poststudent",type: 'POST',data:JSON.stringify({ name: "张三", age: 21 }),//Json序列化一个对象,小括号中是一个对象,可以单独定义success:function () {},dataType: "json",contentType: "application/json"});
- 通过传递一个实体类对象
后端:
public class Student{public string Name { get; set; }public int Age { get; set; }}[HttpPost]public 类型 PostStudent(Student student){//student.Age=21//student.Name="张三"...}
- 通过dynamic动态类型
后端:
[HttpPost]
public 类型 PostStudent(dynamic student)
{var name = student.name;//name大小写与前端参数一致,var类型接收var age = student.age;...
}
- JObject参数
后端:
[HttpPost]
public 类型 PostStudent(JObject student)
{var name = student["name"];var age = student["age"];...
}
总结
Get请求与Post请求(以及其他请求方式)的根本原因是http协议以及浏览器规范对http请求传参的规定,从而体现出许多差异。.net WebApi的路由机制是通过模式匹配来进行的,可以自己定义一些路由模板或者启用特性路由,体现了该路由机制的灵活性
相关知识点
- .net WebApi路由机制
- .net WebApi模型绑定
- .net WebApi参数传递
- JQuery/Ajax发起请求
- Json
.net WebApi相关推荐
- 开源组件websocket-sharp中基于webapi的httpserver使用体验
一.背景 因为需要做金蝶ERP的二次开发,金蝶ERP的开放性真是不错,但是二次开发金蝶一般使用引用BOS.dll的方式,这个dll对newtonsoft.json.dll这个库是强引用,必须要用4.0 ...
- ASP.NET WebAPI 11 参数验证
在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性. ModelState 在ApiController中一个ModelState属性用来获取参 ...
- php webapi验签,Asp.netCore3.0 WebApi从0到1手摸手教你写【5】增加接口参数签名验证...
通过前几个教程的学习,对webapi的编写基本上就可以入门了,可以做项目了,今天我们再给接口加个参数签名认证,之前的接口相当于赤果果的暴露在了网络上,只要知道接口地址.接口调用方式和传参就可以畅所欲为 ...
- ASP.NET WebAPi之断点续传下载(下)
前言 上一篇我们穿插了C#的内容,本篇我们继续来讲讲webapi中断点续传的其他情况以及利用webclient来实现断点续传,至此关于webapi断点续传下载以及上传内容都已经全部完结,一直嚷嚷着把S ...
- nodejs获取ASP.Net WebAPI(IIS Windows验证)
处理了很多天,终于使用Nodejs可以发出请求至WebAPI,能够正常处理数据了 首先加入npm包 npm install httpntlm 在app.js中加入代码 var httpntlm = r ...
- asp.net webapi 序列化为xml 时实体属性增加![CDATA[]]防止特殊字符
有时webapi在序列化xml时,可能需要给某些带有html或特殊字符(如 < > & /)的字段加上<![CDATA[]]> 已防止影响xml正常数据,如果使用.as ...
- 通过httpmodule获取webapi返回的信息
我写了一个webapi,想在module中获取请求的信息和返回的信息,写进log里,以方便以后查询.request信息很容易能拿到,但是返回信息得费一番周折.不多说,上代码 public class ...
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)
我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为json,xml等),但是如果Controller的自动序列化后的结果不是我们想要的该 ...
- asp.net core系列 38 WebAPI 返回类型与响应格式--必备
一.返回类型 ASP.NET Core 提供以下 Web API Action方法返回类型选项,以及说明每种返回类型的最佳适用情况: (1) 固定类型 (2) IActionResult (3) Ac ...
- kindeditor扩展粘贴截图功能修改图片上传路径并通过webapi上传图片到图片服务器...
2019独角兽企业重金招聘Python工程师标准>>> kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. ...
最新文章
- 互联网项目中, 一些可能有用的开源系统
- 两种方法判断有向图是否有环【DFS】【拓扑排序】
- 后台开发常用mysql语句_v1.0
- .deploy 文件 php,关于php:Heroku deploy自动删除服务器文件?
- eslint 中文解释
- Oracle REGEXP_SUBSTR 字符串截取函数的使用
- A卡比N卡画质好,真有此事吗?
- 【Ubuntu】Ubuntu16.04配置python环境(vim、ipython)
- 42.从非托管磁盘创建虚拟机
- 源码安装collectd系统监控和统计工具
- python和java哪个好-Python和Java到底哪个更好?
- Modbus转Profinet网关连接英威腾Goodrive200A配置案例
- Hexo+Next主题的一些实用插件和美化升级
- windows7 32位系统下好用的一款视频制作工具--Windows live影音制作
- 一文搞掂十大经典排序算法
- H5页面微信授权登录——前端部分
- iTunes无法与iPhone正常连接的解决办法
- 外媒聚焦:孙宇晨任格林纳达驻WTO大使,为WTO注入数字经济动力
- 如何配置Python虚拟环境
- 4、5线小县城的年轻人每天在玩什么?