Web API初探

前几天有位同事说web api中的接口参数为对象的时候不好接收,具体什么方式我忘记了,虽然本人以前并没有接触过这方面的知识,但是据说和MVC差不多的,今天小小的研究一下,我想应该是可以的。

直接新建一个WEB API的项目,本人使用HttpClient这个类进行HTTP请求(简单方便强大些)

一、GET请求

先看GET方式请求

我们先新建一个用户对象,重写ToString方法。

复制代码
public class Users
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public override string ToString()
    {
        string str = string.Format("Id={0}&UserName={1}", Id, UserName);
        return str;
    }
}
复制代码

然后在一个Action中编写请求方法:

复制代码
public ActionResult Index()
{
    Users users = new Users()
    {
        Id = 1,
        UserName = "wms"
    };
    string geturl = "http://localhost:34390/api/gpm/test/ObjGet?" + users.ToString();
    HttpClient client = new HttpClient();
    client.GetAsync(geturl);
    return View();
}
复制代码

接收端:

复制代码
public class Users
{
    public int Id { get; set; }
    public string UserName { get; set; }
}

[HttpGet]
public void ObjGet([FromUri]Users users)
{
    var obj = users;
}
复制代码

看一下请求结果:

结果是可以的,但是必须要加上HttpGet和FromUri这个属性,否则是不行的

 二、POST方式

post方式还是有些麻烦的,为了便于传输,在Users类中新增一个方法:

复制代码
public class Users
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public override string ToString()
    {
        string str = string.Format("Id={0}&UserName={1}", Id, UserName);
        return str;
    }
    public Dictionary<string, string> ToDictionary()
    {
        return new Dictionary<string, string>()
        {
            {"Id",Id.ToString()},
            {"UserName",UserName}
        };
    }
}
复制代码

 

在看一次请求过程:

复制代码
public ActionResult Index()
{
    string posturl = "http://localhost:34390/api/gpm/test/ObjPost";
    Users postUser = new Users()
    {
        Id = 2,
        UserName = "wms2"
    };
    HttpContent content = new FormUrlEncodedContent(postUser.ToDictionary());
    HttpClient client = new HttpClient();
    client.PostAsync(posturl, content);
    return View();
}
复制代码

 

 接收端:

[HttpPost]
public void ObjPost([FromBody]Users users)
{
    var user = users;
}

 

查看结果:

这样是行的通的 

 

posted on   Jade_K  阅读(372)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示