开始正文前,咱们先了解下,接下来的文章作者都会围绕《真实职场关于Web api学习指南(免费开放)》开展章节,让你们明白真实职场关于Web api上的认知和实际应用。点进来看的朋友,估计都是为了学习这项技术而来的,不用着急,静下心来慢慢看,可能会有不一样的收获。
适合学习人群:刚入行IT新人和不懂Web api的朋友们
顺带给大家一个学习或工作利器----职业帮手pt(第三方API接口) :
因为现在很多第三方API接口都是需要高昂收费的,针对人群大多数是企业,而个人来说相对比较少,就算是服务商平台允许个人注册的,起步收费也是挺贵的,不适合个人开发者使用,有兴趣的朋友可以点击下面的链接,浏览查看(链接地址:http://apiplatform.top)
本篇文章继续深入学习控制器Controller的使用方法,下面将创建一个新的控制器,一一举例说明不同访问方式的运用。
1. 创建控制器,命名为DemoController,其中Demo就是我们定义的控制器名。
2. 引入 [HttpGet]、 [HttpPost]、【HttpPut】、【HttpDelete】来定义方法的访问方式
一、get请求------------基础类型参数(INT,STRING,BOOL,DECIMAL等)
下面这三个例子,分别举了无参数方法,一个参数方法,两个(多个)参数方法,数据类型、返回类型都是后台开发十分熟悉的,很简单。
/// <summary>
/// 查询用户ID
/// 参数:空
/// </summary>
[HttpGet]
public string QueryUserId()
{
try
{
//ADO.NET 自行连接访问数据库,获取数据来源
return "ADO.NET 自行连接访问数据库 获取到的数据来源,如字符串";
}
catch
{
return null;
}
}
/// <summary>
/// 查询用户ID
/// 参数:用户编号
/// </summary>
[HttpGet]
public string QueryUserId(string userNo)
{
try
{
//ADO.NET 自行连接访问数据库,获取数据来源
//userNo 根据这个参数,获取返回数据
return string.Format("参数:{0},ADO.NET 自行连接访问数据库 获取到的数据来源,如字符串",userNo);
}
catch
{
return null;
}
}
/// <summary>
/// 查询用户ID
/// 参数:用户名称,用户性别
/// </summary>
[HttpGet]
public string QueryUserId(string userName, string userSex)
{
try
{
//ADO.NET 自行连接访问数据库,获取数据来源
//userNo 根据这个参数,获取返回数据
return string.Format("参数:{0}|{1},ADO.NET 自行连接访问数据库 获取到的数据来源,如字符串", userName, userSex);
}
catch
{
return null;
}
}
还记得上几篇文章提到的 “路由规则” 吗?它就是允许访问方法的路由路径地址,我保持默认的路由配置地址:api/{controller}/{id}
组成的访问地址:http(s)://IP地址:接口/api/控制器名称/Action方法
(1. 无参数访问接口方法,返回如图1所示:)
图1
(2. 一个参数访问接口方法,返回如图2所示:)
图2
(3. 两(多)个参数访问接口方法,返回如图3所示:)
图3
问题来了,我想修改下路由配置规则,把 "api/{controller}/{id}" 改成 “{controller}/{id}”,那么上面的访问地址都会报错404,找不到地址,URL地址把api/去掉,就可以正常访问了。
如果大家跳过文章观看,不明白Web api的Get访问方式,请查看这篇文章补习补习:真实职场关于Web api学习指南(免费开放)一一3.Web api基本定义_IT_AKK20210918的博客-CSDN博客
一、get请求------------实体MODEL参数
就是自行创建一个Model类,定义自己的属性,如我创建一个名为 “UserInfo” 的实体类,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication1.Models
{
public class UserInfo
{
public string UserId { get; set; }
public string UserNo { get; set; }
public string UserName { get; set; }
public string UserSex { get; set; }
}
}
下面这个例子,用了UserInfo实体类作为参数,个人是不建议采用这种GET访问方式的,因为URL地址会有一定的长度限制,其实客户端/前端访问Web服务的时候,数据是会自动转换类似于JSON能兼容Web服务的格式,后台服务从而接收数据。
如果非嘚用实体参数的话,建议用POST方法。
/// <summary>
/// 查询用户ID
/// 参数:实体用户信息
/// </summary>
[HttpGet]
public string QueryUserId([FromUri] Models.UserInfo userInfo)
{
try
{
//ADO.NET 自行连接访问数据库,获取数据来源
//userInfo 根据实体参数,获取返回数据
return string.Format("参数:{0}|{1},ADO.NET 自行连接访问数据库 获取到的数据来源,如字符串", userInfo.UserNo, userInfo.UserName);
}
catch
{
return null;
}
}
var postdata = { UserId: "", UserNo: "sd00358", UserName: "Johnie",UserSex:"男" };
$.ajax({
type: "get",
url: "https://localhost:44345/api/Demo/QueryUserId",
data: postdata,
success: function (data, status) { }
});
这里有个注意点,如果把【FromUri】去掉的话,后台Web服务将获取不到数据来源,区别就是get请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),Get请求的时候可以在参数里面加上[FromUri]即可直接得到对象
一、get请求------------数组DATA参数
这个直接忽略,还是那句不建议GET方法请求,URL有长度限制,建议直接用POST访问。
二、post/put/delete请求
以post请求为准,put、delete原理都一样。
下面这个例如将简单展示一个POST请求访问Web服务的方式,大家没有完整代码是没法用的,明白它的思路原理。
方法逻辑:传入一个Json格式的数据源,然后获取数据源反序列成Model实体对象,获取到这个对象数据之后,就可以往下进行自己的业务了,本例子中只是校验数据源、并返回前端/客户端信息,仅此而已。
/// <summary>
/// Hello world 测试
/// </summary>
[HttpPost]
public ReturnBShowMsgInfo GetHelloWorldOption([FromBody] JObject InData)
{
ReturnBShowMsgInfo returnMsgInfo = null;
if (InData == null || string.IsNullOrEmpty(InData.ToString()))
{
returnMsgInfo = new ReturnBShowMsgInfo()
{
data = string.Empty,
Status = ((int)WebPubEnumDefine.EnumBShowReturnStatus.参数异常).ToString(),
Msg = "(101)参数异常,无法获取数据"
};
return returnMsgInfo;
}
try
{
string data = InData.ToString();
if (string.IsNullOrEmpty(data))
{
returnMsgInfo = new ReturnBShowMsgInfo()
{
data = string.Empty,
Status = ((int)WebPubEnumDefine.EnumBShowReturnStatus.参数异常).ToString(),
Msg = "(101)参数异常,无法获取数据"
};
return returnMsgInfo;
}
ParasInfo parasInfo = JsonConvert.DeserializeObject<ParasInfo>(data);
string acceptData = parasInfo.Paras;
if (string.IsNullOrEmpty(acceptData))
{
returnMsgInfo = new ReturnBShowMsgInfo()
{
data = string.Empty,
Status = ((int)WebPubEnumDefine.EnumBShowReturnStatus.参数异常).ToString(),
Msg = "(101)参数异常,无法获取数据"
};
return returnMsgInfo;
}
string returnData = string.Format("{0},Hello world!", acceptData);
returnMsgInfo = new ReturnBShowMsgInfo()
{
data = returnData,
Status = ((int)WebPubEnumDefine.EnumBShowReturnStatus.操作成功).ToString(),
Msg = "(200)对接成功!"
};
}
catch (Exception ex)
{
returnMsgInfo = new ReturnBShowMsgInfo()
{
data = string.Empty,
Status = ((int)WebPubEnumDefine.EnumBShowReturnStatus.访问服务器异常).ToString(),
Msg = ex.Message + ex.StackTrace
};
}
return returnMsgInfo;
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication1.Models.Identify
{
public class ParasInfo
{
public string Paras { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication1.Models
{
public class ReturnBShowMsgInfo
{
public string data { get; set; } //返回数据源
public string Status { get; set; } //返回状态
public string Msg { get; set; } //返回消息
}
}
怎么验证呢?打开PostMan辅助工具,在线测试这个接口,如图:
有兴趣的朋友们,自行登录下载自行测试用,可点击下面链接地址:Download Postman | Get Started for Free
这里有个注意点,【FromBody】标识符,因为POST/PUT/DELETE请求的访问都是从Body正文里面传送数据的,但是呢会有一定的限定,一般我是不用这种的,大家知道学学有这么一回事就好~
下一篇文章将继续深入学习Web api服务的一个重要知识点:特性路由,就是之前的文章提到的,可以自行定义路由规则,按自己的方式访问不同的地址方法。
有需要资源的朋友,可以直接打开链接浏览,资源的内容已经是本章节系列的整合实例Demo。
如有耐心观看本章节的文章,请敬请期待接下来的文章,感谢阅读!
C#职场最精髓Webapi实例(Demo含源码,前后端分离,终身受益).rar_vs2019webapi实例,c#前后端分离-互联网文档类资源-CSDN下载