写在前面


上一篇,我已经写了如何快速的创建一个webapi项目。接下来,说一下webapi相关的路由请求吧。

我们来创建一个包含读/写操作的web api 2控制器。

我们仔细看这个初始的web api,我们会发现

1.在控制器的方法中,会默认一种格式的请求。而默认的则是Post请求。

2.在控制器的方法中,不会默认为Get请求。所以,需要请求数据时,需要加上前缀【HttpGet】。

3.在控制器的方法中,请求数据用Get请求,删除数据用Delete请求,添加数据用Post请求,编辑数据会用到Put请求。而它们所对应的前缀则分别是【HttpGet】,【HttpDelete】,【HttpPost】,【HttpPut】。

4.在控制器的方法中,我们会发现【FromBody】]这个属性。而它作用就是指定参数来自于外部请求。

需要注意的是:使用其传递参数,需要特定的格式。而这样的格式不是常见得Key=Value得键值对的形式。模型绑定器希望【FromBody】找到没有键名的值,也就是=value,不是Key=Value。

5.在控制器的方法中,还会有【FromUri】属性。它的作用就是指定参数来自url。

WebApi Get 请求


1.无参数的请求

前台页面


$.ajax({
url: "../api/Home/GetData",
type: "Get",
datatype: "json",
contentType: "application/json",
}).done(function (msg) {}).fail(function (e) {});

后台页面

public class DeviceStatus
{
public int ID {get;set;}
public string Power { get; set; }
public string Mode { get; set; }
public string Fan { get; set; }
public int TempSet { get; set; }
public string UpdateTime { get; set; }
} public List<DeviceStatus> GetDeviceStatus()
{
var devi = new List<DeviceStatus> {
new DeviceStatus{ID=1,Power="开",Mode="制冷",Fan="低",TempSet=10,UpdateTime="2019-08-01 17:00:00"},
new DeviceStatus{ID=2,Power="关",Mode="制热",Fan="低",TempSet=20,UpdateTime="2019-08-02 17:00:00"},
new DeviceStatus{ID=3,Power="开",Mode="除湿",Fan="高",TempSet=30,UpdateTime="2019-08-03 17:00:00"},
new DeviceStatus{ID=4,Power="关",Mode="制热",Fan="中",TempSet=40,UpdateTime="2019-08-04 17:00:00"},
new DeviceStatus{ID=4,Power="关",Mode="制热",Fan="高",TempSet=50,UpdateTime="2019-08-05 17:00:00"},
};
var temp = (from u in devi select u).ToList();
return temp;
} [HttpGet]
public IEnumerable<DeviceStatus> GetData()
{
return GetDeviceStatus();
}

显示结果

2.一个参数的请求

前台页面请求

$.ajax({
url: "../api/Home/GetOneParameter",
type: "Get",
datatype: "json",
contentType: "application/json",
data: { ID: 2 }
}).done(function (msg) {
alert(JSON.stringify(msg));
}).fail(function (e) {
alert("调用失败:"+e);
});

后台页面

public class DeviceStatus
{
public int ID {get;set;}
public string Power { get; set; }
public string Mode { get; set; }
public string Fan { get; set; }
public int TempSet { get; set; }
public string UpdateTime { get; set; }
} public List<DeviceStatus> GetDeviceStatus()
{
var devi = new List<DeviceStatus> {
new DeviceStatus{ID=1,Power="开",Mode="制冷",Fan="低",TempSet=10,UpdateTime="2019-08-01 17:00:00"},
new DeviceStatus{ID=2,Power="关",Mode="制热",Fan="低",TempSet=20,UpdateTime="2019-08-02 17:00:00"},
new DeviceStatus{ID=3,Power="开",Mode="除湿",Fan="高",TempSet=30,UpdateTime="2019-08-03 17:00:00"},
new DeviceStatus{ID=4,Power="关",Mode="制热",Fan="中",TempSet=40,UpdateTime="2019-08-04 17:00:00"},
new DeviceStatus{ID=4,Power="关",Mode="制热",Fan="高",TempSet=50,UpdateTime="2019-08-05 17:00:00"},
};
var temp = (from u in devi select u).ToList();
return temp;
} [HttpGet]
public IEnumerable<DeviceStatus> GetOneParameter([FromUri] int ID) {
var devi = GetDeviceStatus();
var temp = (from u in devi where u.ID==ID select u).ToList();
return temp;
}

显示结果

3.多个参数的请求

前台页面请求

$.ajax({
url: "../api/Home/GetManyParameter",
type: "Get",
datatype: "json",
contentType: "application/json",
data: { ID: 1, Power: "开", Mode: "制冷", Fan: "高", TempSet: 26 }
}).done(function () {}).fail(function (e) {});

后台页面程序

public class DeviceStatus
{
public int ID {get;set;}
public string Power { get; set; }
public string Mode { get; set; }
public string Fan { get; set; }
public int TempSet { get; set; }
public string UpdateTime { get; set; }
} public List<DeviceStatus> GetDeviceStatus()
{
var devi = new List<DeviceStatus> {
new DeviceStatus{ID=1,Power="开",Mode="制冷",Fan="低",TempSet=10,UpdateTime="2019-08-01 17:00:00"},
new DeviceStatus{ID=2,Power="关",Mode="制热",Fan="低",TempSet=20,UpdateTime="2019-08-02 17:00:00"},
new DeviceStatus{ID=3,Power="开",Mode="除湿",Fan="高",TempSet=30,UpdateTime="2019-08-03 17:00:00"},
new DeviceStatus{ID=4,Power="关",Mode="制热",Fan="中",TempSet=40,UpdateTime="2019-08-04 17:00:00"},
new DeviceStatus{ID=4,Power="关",Mode="制热",Fan="高",TempSet=50,UpdateTime="2019-08-05 17:00:00"},
};
var temp = (from u in devi select u).ToList();
return temp;
} [HttpGet]
public IEnumerable<string> GetManyParameter([FromUri] int ID, string Power, string Mode, string Fan, int TempSet) {
return new string[] { "编号:"+ID.ToString(), "开机状态:"+Power, "工作模式:"+Mode, "风量:"+Fan, "温度:"+TempSet.ToString() };
}

显示结果

4.实体参数的请求

前台页面

$.ajax({
url: "../api/Home/GetManyParameterModel",
type: "Get",
datatype: "json",
contentType: "application/json",
data: { ID: 2, Power: "关", Mode: "制热", Fan: "中", TempSet: 35 }
}).done(function () {}).fail(function (e) {});

后台页面

public class DeviceStatus
{
public int ID {get;set;}
public string Power { get; set; }
public string Mode { get; set; }
public string Fan { get; set; }
public int TempSet { get; set; }
public string UpdateTime { get; set; }
} public List<DeviceStatus> GetDeviceStatus()
{
var devi = new List<DeviceStatus> {
new DeviceStatus{ID=1,Power="开",Mode="制冷",Fan="低",TempSet=10,UpdateTime="2019-08-01 17:00:00"},
new DeviceStatus{ID=2,Power="关",Mode="制热",Fan="低",TempSet=20,UpdateTime="2019-08-02 17:00:00"},
new DeviceStatus{ID=3,Power="开",Mode="除湿",Fan="高",TempSet=30,UpdateTime="2019-08-03 17:00:00"},
new DeviceStatus{ID=4,Power="关",Mode="制热",Fan="中",TempSet=40,UpdateTime="2019-08-04 17:00:00"},
new DeviceStatus{ID=4,Power="关",Mode="制热",Fan="高",TempSet=50,UpdateTime="2019-08-05 17:00:00"},
};
var temp = (from u in devi select u).ToList();
return temp;
} [HttpGet]
public IEnumerable<string> GetManyParameterModel([FromUri] DeviceStatus devi) {
return new string[] { "编号:" + devi.ID.ToString(), "开机状态:" + devi.Power, "工作模式:" + devi.Mode, "风量:" + devi.Fan, "温度:" + devi.TempSet.ToString() };
}

显示结果

WebApi Post 请求


1.键值对请求

前台页面

$.ajax({
url: "../api/Home/PostNoKeyValueParameter",
type: "Post",
data: { "": "1" }
}).done(function () {}).fail(function (e) {}); 注意:键值对请求的时候需要把 datatype: "json"和contentType: "application/json"注释掉,否则后台接收不到数据库。

后台页面


[HttpPost]
public string PostNoKeyValueParameter([FromBody] int ID)
{
return "接收编号是:" + ID;
}

显示结果

2.dynamic 动态类型请求


前台页面请求

$.ajax({
url: "../api/Home/PostDynamicValueParameter",
type: "Post",
data: { "": "2" }
}).done(function () {}).fail(function (e) {});

后台页面

[HttpPost]
public string PostDynamicValueParameter([FromBody] dynamic ID)
{
return "接收编号是:" + ID;
}

显示结果

3.JObject 参数请求


前台页面

var devi = { ID: 2, Power: "关", Mode: "制热", Fan: "中", TempSet: 35 };
$.ajax({
url: "../api/Home/PostJObjectValueParameter",
type: "Post",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(devi)
}).done(function (msg) { }).fail(function (e) { });

后台页面

[HttpPost]
public string PostJObjectValueParameter([FromBody] JObject data)
{
return "接收编号是:" + data["ID"]+ "开机状态:" + data["Power"] + "工作模式:" + data["Mode"];
}

显示结果

4.实体类 请求


前台页面

var devi = { ID: 3, Power: "开", Mode: "制冷", Fan: "高", TempSet: 40 };
$.ajax({
url: "../api/Home/PostModelValueParameter",
type: "Post",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(devi)
}).done(function (msg) { }).fail(function (e) { });

后台页面

[HttpPost]
public string PostModelValueParameter([FromBody] DeviceStatus data)
{
return "接收编号是:" + data.ID + ";开机状态:" + data.Power + ";工作模式:" + data.Mode + ";风量:" + data.Fan + ";温度:" + data.TempSet.ToString();
}

显示结果

文章出处:原文

ASP.NET WebApi 学习与实践系列(2)---WebApi 路由请求的理解的更多相关文章

  1. ASP.NET WebApi 学习与实践系列(1)---如何创建 WebApi

    写在前面 最近在做一个app的时候发现需要写后台服务.所以,在考虑是使用webapi还是使用webserver来写这个后台服务的时候.爱纠结的我,最后还是选择了使用webapi来写这个后台服务. 原因 ...

  2. .NET Core 微服务学习与实践系列文章目录索引(2019版)

    参考网址: https://archy.blog.csdn.net/article/details/103659692 2018年,我开始学习和实践.NET Core,并开始了微服务的学习,以及通过各 ...

  3. .NET Core微服务架构学习与实践系列文章索引目录

    一.为啥要总结和收集这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有 ...

  4. ASP.NET MVC学习笔记(一) 从路由开始创建mvc

    之前一篇写一半发现版本太老了,是基于mvc2的. 两本参考书编写的顺序各方面都不太一样.决定重新写一篇. 我这篇文章基于mvc5,vs2015 参考书:Will保哥的ASP.NET MVC4开发指南 ...

  5. ASP.NET MVC学习系列(二)-WebAPI请求

    继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...

  6. ASP.NET MVC学习系列(二)-WebAPI请求(转)

    转自:http://www.cnblogs.com/babycool/p/3922738.html 继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的g ...

  7. [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参

    [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参 本文转自:http://www.cnblogs.com/babycool/p/3922738.html ASP.NET MVC学习系 ...

  8. ASP.NET MVC学习系列(二)-WebAPI请求 转载https://www.cnblogs.com/babycool/p/3922738.html

    继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...

  9. .NET Core on K8S学习实践系列文章索引(Draft版)

    一.关于这个系列 自从去年(2018年)底离开工作了3年的M公司加入X公司之后,开始了ASP.NET Core的实践,包括微服务架构与容器化等等.我们的实践是渐进的,当我们的微服务数量到了一定值时,发 ...

随机推荐

  1. .htaccess tricks总结

    目录 .htaccess tricks总结 一.什么是.htaccess 二.利用条件 三.利用方式 && tricks 1.将指定后缀名的文件当做php解析 2.php_value利 ...

  2. kafka安装运行(docker)

    zookeeper参照https://www.cnblogs.com/wintersoft/p/11128484.html mkdir /opt/kafka -pvim /opt/kafka/Dock ...

  3. Curiosity-Driven Learning through Next State Prediction

    Curiosity-Driven Learning through Next State Prediction 2019-10-19 20:43:17 This paper is from: http ...

  4. JPA的一对多,多对多用法

    一.@OneToOne关系映射 JPA使用@OneToOne来标注一对一的关系. 实体 People :用户. 实体 Address:家庭住址. People 和 Address 是一对一的关系. 这 ...

  5. 认真分析mmap:是什么 为什么 怎么用(转)

    阅读目录 mmap基础概念 mmap内存映射原理 mmap和常规文件操作的区别 mmap优点总结 mmap相关函数 mmap使用细节 回到顶部 mmap基础概念 mmap是一种内存映射文件的方法,即将 ...

  6. mqtt概念整理

    运行模式: 服务器: emqx (https://docs.emqx.io/edge/v3/cn/install.html) 协议头字节数: 2个字节 三种消息可能性保障(Qos): Qos0:最多一 ...

  7. LR 算法总结--斯坦福大学机器学习公开课学习笔记

    在有监督学习里面有几个逻辑上的重要组成部件[3],初略地分可以分为:模型,参数 和 目标函数.(此部分转自 XGBoost 与 Boosted Tree) 一.模型和参数   模型指给定输入xi如何去 ...

  8. Synchronize深入

    前言:    synchronize会使用,但是对于深层次的知识,不是很清楚,故整理一篇博客. 简介:   能够保证在同一时刻,最多只有一个线程执行该端代码,以达到保证并发安全效果. 两种用法: 对象 ...

  9. zookeeper+Dubbo环境搭建及简单Demo

    1 安装zk https://www.cnblogs.com/feifeicui/p/11175502.html 2 安装 dubbo-admin https://www.cnblogs.com/fe ...

  10. Cassandra开发入门文档第四部分(集合类型、元组类型、时间序列、计数列)

    Cassandra 提供了三种集合类型,分别是Set,List,MapSet: 非重复集,存储了一组类型相同的不重复元素,当被查询时会返回排好序的结果,但是内部构成是无序的值,应该是在查询时对结果进行 ...