真实职场关于Web api学习指南(免费开放)一一7.Web api的控制器Controller 深入学习

开始正文前,咱们先了解下,接下来的文章作者都会围绕《真实职场关于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下载

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_AKK20210918

感谢阅读文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值