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]在一个方法中只能修饰一个参数。

  1. 如果客户端Content-Type是application/json, api接口如果是用单个对象做参数的时候,加或者不加[FromBody]都可以正常解析参数,但是接口是用对象列表做参数时候,则必须加[FromBody],否则读取不到参数
  2. 如果客户端Content-Type不是application/json,api接口必须加[FromForm],否则客户端调用接口会报400错误。
  3. 如果加上[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"});
  1. 通过传递一个实体类对象

后端:

 public class Student{public string Name { get; set; }public int Age { get; set; }}[HttpPost]public 类型 PostStudent(Student student){//student.Age=21//student.Name="张三"...}
  1. 通过dynamic动态类型

后端:

[HttpPost]
public 类型 PostStudent(dynamic student)
{var name = student.name;//name大小写与前端参数一致,var类型接收var age = student.age;...
}
  1. JObject参数

后端:

[HttpPost]
public 类型 PostStudent(JObject student)
{var name = student["name"];var age = student["age"];...
}

总结

Get请求与Post请求(以及其他请求方式)的根本原因是http协议以及浏览器规范对http请求传参的规定,从而体现出许多差异。.net WebApi的路由机制是通过模式匹配来进行的,可以自己定义一些路由模板或者启用特性路由,体现了该路由机制的灵活性

相关知识点

  1. .net WebApi路由机制
  2. .net WebApi模型绑定
  3. .net WebApi参数传递
  4. JQuery/Ajax发起请求
  5. Json

.net WebApi相关推荐

  1. 开源组件websocket-sharp中基于webapi的httpserver使用体验

    一.背景 因为需要做金蝶ERP的二次开发,金蝶ERP的开放性真是不错,但是二次开发金蝶一般使用引用BOS.dll的方式,这个dll对newtonsoft.json.dll这个库是强引用,必须要用4.0 ...

  2. ASP.NET WebAPI 11 参数验证

    在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性. ModelState 在ApiController中一个ModelState属性用来获取参 ...

  3. php webapi验签,Asp.netCore3.0 WebApi从0到1手摸手教你写【5】增加接口参数签名验证...

    通过前几个教程的学习,对webapi的编写基本上就可以入门了,可以做项目了,今天我们再给接口加个参数签名认证,之前的接口相当于赤果果的暴露在了网络上,只要知道接口地址.接口调用方式和传参就可以畅所欲为 ...

  4. ASP.NET WebAPi之断点续传下载(下)

    前言 上一篇我们穿插了C#的内容,本篇我们继续来讲讲webapi中断点续传的其他情况以及利用webclient来实现断点续传,至此关于webapi断点续传下载以及上传内容都已经全部完结,一直嚷嚷着把S ...

  5. nodejs获取ASP.Net WebAPI(IIS Windows验证)

    处理了很多天,终于使用Nodejs可以发出请求至WebAPI,能够正常处理数据了 首先加入npm包 npm install httpntlm 在app.js中加入代码 var httpntlm = r ...

  6. asp.net webapi 序列化为xml 时实体属性增加![CDATA[]]防止特殊字符

    有时webapi在序列化xml时,可能需要给某些带有html或特殊字符(如 < > & /)的字段加上<![CDATA[]]> 已防止影响xml正常数据,如果使用.as ...

  7. 通过httpmodule获取webapi返回的信息

    我写了一个webapi,想在module中获取请求的信息和返回的信息,写进log里,以方便以后查询.request信息很容易能拿到,但是返回信息得费一番周折.不多说,上代码 public class ...

  8. ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)

    我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为json,xml等),但是如果Controller的自动序列化后的结果不是我们想要的该 ...

  9. asp.net core系列 38 WebAPI 返回类型与响应格式--必备

    一.返回类型 ASP.NET Core 提供以下 Web API Action方法返回类型选项,以及说明每种返回类型的最佳适用情况: (1) 固定类型 (2) IActionResult (3) Ac ...

  10. kindeditor扩展粘贴截图功能修改图片上传路径并通过webapi上传图片到图片服务器...

    2019独角兽企业重金招聘Python工程师标准>>> kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. ...

最新文章

  1. 互联网项目中, 一些可能有用的开源系统
  2. 两种方法判断有向图是否有环【DFS】【拓扑排序】
  3. 后台开发常用mysql语句_v1.0
  4. .deploy 文件 php,关于php:Heroku deploy自动删除服务器文件?
  5. eslint 中文解释
  6. Oracle REGEXP_SUBSTR 字符串截取函数的使用
  7. A卡比N卡画质好,真有此事吗?
  8. 【Ubuntu】Ubuntu16.04配置python环境(vim、ipython)
  9. 42.从非托管磁盘创建虚拟机
  10. 源码安装collectd系统监控和统计工具
  11. python和java哪个好-Python和Java到底哪个更好?
  12. Modbus转Profinet网关连接英威腾Goodrive200A配置案例
  13. Hexo+Next主题的一些实用插件和美化升级
  14. windows7 32位系统下好用的一款视频制作工具--Windows live影音制作
  15. 一文搞掂十大经典排序算法
  16. H5页面微信授权登录——前端部分
  17. iTunes无法与iPhone正常连接的解决办法
  18. 外媒聚焦:孙宇晨任格林纳达驻WTO大使,为WTO注入数字经济动力
  19. 如何配置Python虚拟环境
  20. 4、5线小县城的年轻人每天在玩什么?

热门文章

  1. 用VBA为选定的单元格加上边框
  2. 20岁与30岁的恋爱观
  3. Python学习:演练分组函数和聚合函数的组合使用
  4. 极坐标图、雷达图、极轴图——matplotlib常见图表绘制
  5. 鼠标悬停文字上显示图片
  6. PHP 获取真实 IP 的正确姿势
  7. 【嵌入式经验系列】基于色坐标的RGB灯调光调色算法
  8. 写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)...
  9. Retrofit examples
  10. 视频标注软件Darklabel用法指南