ASP.NET Core使用HttpWebRequest发送请求

本文介绍了如何在ASP.NET Core中创建API项目并实现GET和POST请求。通过示例展示了如何封装后台操作,获取和返回数据。同时在另一个Web项目中,演示了如何调用这些API,包括默认GET请求、带参数GET请求和POST请求。最后,提到了在部署时需要考虑的跨域配置问题。
摘要由CSDN通过智能技术生成

这里所讲的getpost请求,与平时我们在前台通过js传的getpost并不相同。比如我们有这样的一个场景:我们需要读取一个api的数据,在这个过程,我们想要在后台进行封装,从而返回给前台一个操作结果。就好像,我们在做微信开发的时候,自定义菜单获取Access_Token我们都是通过在后台对其进行getpost请求来封装。比较抽象,示意图如下:

在这里插入图片描述

首先创建一个API项目,并创建一个类:

在这里插入图片描述

NuGetMicrosoft.AspNetCore.Mvc.NewtonsoftJson 作为格式化JSON字符串的工具类。这里掌握两个方法即可:
SerializeObject:将任意的object转换为JSON字符串
DeserializeObject< T >:将JSON字符串转换数据模型

在这里插入图片描述

public class Product
    {
        /// <summary>
        /// 物料编号
        /// </summary>
        public string MaterialNo { get; set; }

        /// <summary>
        /// 物料名称
        /// </summary>
        public string MaterialName { get; set; }

        /// <summary>
        /// 数量
        /// </summary>
        public int Quntity { get; set; }

        /// <summary>
        /// 生产日期
        /// </summary>
        public string ProductDate { get; set; }
    }

创建一个空的API控制器Values,代码如下:

[HttpGet]
        public IEnumerable<Product> Get()
        {
            List<Product> list = new List<Product>();
            for (int i = 0; i < 3; i++)
            {
                Product model = new Product()
                {
                    MaterialNo="ASN20200506"+i,
                    MaterialName="精品盒"+i,
                    Quntity=2000,
                    ProductDate=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
                };
                list.Add(model);
            }
            return list;
        }

        [HttpGet("{MaterialNo}")]
        public Product Get(string MaterialNo)
        {
            return new Product()
            {
                MaterialNo = MaterialNo,
                MaterialName = "GET精品盒:" + MaterialNo,
                Quntity = 2000,
                ProductDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
            };
        }

        [HttpPost]
        public object Post(Product model)
        {
            return JsonConvert.SerializeObject(model);
        }

作一下代码说明:
默认的GET请求列表
带参的GET请求给定的值
POST方法:用于提供其他项目对该API的POST请求
运行程序,切忌不要关闭,因为其他项目要进行调用
请求规则/api/控制器名称

在这里插入图片描述

创建一个新的Web项目,同样创建一个和上面相同的类,并对HomeComtroller进行改造

在这里插入图片描述

NuGetMicrosoft.AspNetCore.Mvc.NewtonsoftJson 作为格式化JSON字符串的工具类。
作一下简单代码说明:
进行Request的时候,ContentTypeMethod是必须的
ContentTypeapplication/json;charset=utf-8指定参数类型
Methodpost 指定指定对其进行 get 还是 post
其余的照搬即可

public IActionResult Index()
        {
            string url = "http://localhost:64643/api/values";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            Stream stream = res.GetResponseStream();
            StreamReader reader = new StreamReader(stream);
            List<Product> result = JsonConvert.DeserializeObject<List<Product>>(reader.ReadToEnd());
            reader.Close();
            stream.Close();
            return Json(result);
            //return View();
        }

        public IActionResult Get()
        {
            string url = "http://localhost:64643/api/values/ASN20200128";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            Stream stream = res.GetResponseStream();
            StreamReader reader = new StreamReader(stream);
            Product model = JsonConvert.DeserializeObject<Product>(reader.ReadToEnd());
            reader.Close();
            stream.Close();
            return Json(model);
        }

        public IActionResult Post()
        {
            Product model = new Product()
            {
                MaterialNo = "ASN20200506",
                MaterialName = "POST精品盒",
                Quntity = 2000,
                ProductDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
            };
            string str = JsonConvert.SerializeObject(model);
            string url = "http://localhost:64643/api/values";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "post";
            req.ContentType = "application/json;charset=utf-8";
            Stream reqStream = req.GetRequestStream();
            byte[] reqBytes = Encoding.UTF8.GetBytes(str);
            reqStream.Write(reqBytes, 0, reqBytes.Length);
            reqStream.Close();

            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            Stream resStream = res.GetResponseStream();
            StreamReader reader = new StreamReader(resStream);
            var result = JsonConvert.DeserializeObject<Product>(reader.ReadToEnd());
            reader.Close();
            resStream.Close();
            return Json(result);
        }

对默认GET进行远程调用测试:

在这里插入图片描述

与定义的数据相同,请求成功!

在这里插入图片描述

对带参的GET进行测试:

在这里插入图片描述

与预想的数据一致,成功!

在这里插入图片描述

对POST进行验证:

在这里插入图片描述在这里插入图片描述

与返回值相同,成功!

在这里插入图片描述

仍需注意的一点是,当部署API项目在服务器上的时候,是要对该项目作跨域配置的,下一节我们再进行详细讲解,如何配置跨域。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值