WinForm 调用 WebApi 入门案例

WinForm 调用 WebApi 入门案例

WinForm 调用 WebApi 入门案例_第1张图片
加载显示页面调用Load方法

 private void Form1_Load(object sender, EventArgs e)
        {
            load();
        }
        public void load() {
            **//url 你的WebApi 地址重要!!!**
            Uri uri = new Uri("http://localhost:64632/user/Select");
            //WebClient:获取webaapi中的数据。
            using (WebClient c = new WebClient())
            {
                //c.Headers["Type"]:获取数据的方式
                c.Headers["Type"] = "GET";
                //c.Headers["Accept"]:获取数据的格式
                c.Headers["Accept"] = "application/json";
                //c.Encoding:数据的编码格式。
                c.Encoding = Encoding.UTF8;
                //DownloadDataCompleted:在多线程情况下,能进行webApi数据传输。
                c.DownloadStringCompleted += (senderobj, es) =>
                {
                    if (es.Result != null)
                    {
                        //把webApi之中获取的json数据 序列化成dataTable
                        var test = JsonConvert.DeserializeObject(es.Result);
                        //GV绑定dataTable数据
                        dgvInfo.DataSource = test;
                    }
                };
                //把当前webApi地址释放掉。
                c.DownloadStringAsync(uri);
            }
        }

创建WebApi 项目
在Models 创建 Cs_User 实体类

public partial class Cs_User
    {
        public int UserID { get; set; }
        public string UserName { get; set; }
        public string UserTel { get; set; }
        public string UserSex { get; set; }
    }

在WebApi中添加CsUserController控制器
重写控制器名称

[RoutePrefix("user")]

注意 重写控制器名称放在控制器所继承的上方

 public class CsUserController : ApiController

截图如下
WinForm 调用 WebApi 入门案例_第2张图片

下面写查询方法 因为我用的EF 所以查询

[Route(“Select”)] 重写方法名称
[HttpGet] 定义你所请求的方法 GET POST 当然会还有Put 就不列举了

  **定义泛型集合 不然WInform 无法显示结果  因为传的为JOSN 数据**
  
    [Route("Select")]
    [HttpGet]
    public List Tables() {

        var row = (from i in db.Cs_User
                   select i).ToList();

        return row;
    }

一定要注意 前面WinFrom 的Url 路径 不要写错
WebApi 查询要转出泛型集合 博主不转泛型 前台JSON 无法反序列化赋给GV 从而绑定数据!!!!

下面简单做一个添加 传值去WebApi

简单写了一个添加的方法 传值需在连接后面加上你要 传的值
当前也可以穿实体 数组 后台接受时肯定也就不一样了

private void btnAdd_1_Click(object sender, EventArgs e)
{
string name = this.txtName.Text.Trim();
string tel = this.txtTel.Text.Trim();
string sex = this.txtSex.Text.Trim();

        //获取webApi数据的地址。
        Uri uri = new Uri("http://localhost:64632/user/AddInfo?name=" + name + "&tel=" + tel + "&sex=" + sex);
        //WebClient:获取webaapi中的数据。
        using (WebClient c = new WebClient())
        {
            //c.Headers["Type"]:获取数据的方式
            c.Headers["Type"] = "GET";
            //c.Headers["Accept"]:获取数据的格式
            c.Headers["Accept"] = "application/json";
            //c.Encoding:数据的编码格式。
            c.Encoding = Encoding.UTF8;
            //DownloadDataCompleted:在多线程情况下,能进行webApi数据传输。
            c.DownloadStringCompleted += (senderobj, es) =>
            {
                //es.Result:如果获取的webapi之中的数据不为空,则绑定gv
                if (es.Result != null)
                {
                    if (es.Result == "\"OK\"")
                    {
                        
                        
                        MessageBox.Show("新增成功");
                        this.Close();
                        this.DialogResult = DialogResult.OK;
                        

                    }

                }
            };
            //把当前webApi地址释放掉。
            c.DownloadStringAsync(uri);
        }
    }

WebApi 添加方法 重写方法 一定要定义参数 无论你传的什么值

[Route("AddInfo")]
        [HttpGet]
        public string AddInfo(string name, string tel, string sex) {
            Cs_User u = new Cs_User();
            u.UserName = name;
            u.UserTel = tel;
            u.UserSex = sex;
            db.Cs_User.Add(u);
            db.SaveChanges();
            return "OK";
        }

博主才疏学浅 如有大佬看见 请多多见谅!!!
如有问题联系 qq:1580551707 请备注 谢谢!

你可能感兴趣的:(WinForm 调用 WebApi 入门案例)