WinForm 调用 WebApi 入门案例

WinForm 调用 WebApi 入门案例

WinFrom前台页面简单案例
加载显示页面调用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<DataTable>(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

截图如下
因为用自带的影响开发 因为开发中有很多情况

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

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

  **定义泛型集合 不然WInform 无法显示结果  因为传的为JOSN 数据**
  
    [Route("Select")]
    [HttpGet]
    public List<Cs_User> 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 请备注 谢谢!

### 回答1: Winform 是一种常见的 Windows 桌面应用程序开发平台,而 WebAPI 是一种基于 HTTP 的 Web 服务框架,两者可以很好地结合,实现桌面应用程序向 Web 服务发送请求获取数据的功能。 在 Winform调用 WebAPI 可以使用 .NET 的 HttpWebRequest 或 HttpClient 类,封装 HTTP 请求并发送给 Web 服务。在发送请求之前,需要先确定 WebAPI 的 URL 地址,以及请求所要递的参数。可以使用 HttpClient 的 PostAsync 或 GetAsync 方法发送请求,接收 Web 服务返回的数据并处理。在接收到 WebAPI 的响应后,可以使用 JSON 序列化工具将数据反序列化为 .NET 对象,方便在 Winform 窗体中进行显示或进一步处理。 为了让 Winform 程序与 WebAPI 通信更加简便和高效,可以使用第三方的 RESTful API 框架,如 RestSharp 或 ServiceStack。这些框架可以帮助 Winform 应用程序快速、方便地与 WebAPI 进行通信,简化了操作流程,在 Winform 程序中使用起来更加便捷。 总之,Winform 调用 WebAPI 是一种常见且实用的开发方式,可以帮助开发人员快速获取 Web 服务数据或执行业务操作,提高应用程序的功能和效率。 ### 回答2: Winform 调用 Web API 是一个常见的操作,可以通过以下步骤实现。 首先,在 Winform 中添加 Web 请求的相关代码。通过 HttpClient 类,我们可以轻松地向 Web API 发送 HTTP 请求。下面是一个示例代码,用于在 Winform调用 Web API 中的一个方法: ``` HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://localhost:5000/"); HttpResponseMessage response = await client.GetAsync("api/values"); if (response.IsSuccessStatusCode) { string result = await response.Content.ReadAsStringAsync(); textBox1.Text = result; } else { textBox1.Text = "Error"; } ``` 在以上代码中,我们首先创建了一个 HttpClient 实例,并指定其 BaseAddress 属性为 Web API 的地址。然后,我们使用 GetAsync 方法向 Web API 发送请求,并等待响应。如果请求成功,我们将响应内容读取为字符串,并在 Winform 的文本框中显示。 在实际的开发中,我们还需要根据具体的需求和 Web API 的设计,设置请求头、请求参数等相关信息。 总的来说,Winform 调用 Web API 是一种方便、快捷、灵活的方法,可以有效地实现前后端分离,提高应用程序的易用性和可扩展性。 ### 回答3: Winform是一种桌面应用程序,它提供了丰富的用户界面和交互功能。WebAPI则是一种基于HTTP协议的状态无关的服务,它可以用来向任何客户端(包括Winform应用程序)提供数据或者执行某些操作。 要在Winform调用WebAPI,需要使用HttpClient类来发送请求和接收响应。首先需要创建一个HttpClient实例,通过它可以发起各种类型的HTTP请求(如GET、POST、PUT、DELETE等)。同时还可以为每个请求设置必要的header和query参数,以及接收响应的格式(如JSON或XML)。 对于需要进行身份验证或者授权的请求,可以使用HttpClient的Credential属性来指定相应的用户名和密码。此外,还可以使用HttpClient的Timeout属性来设置超时时间,以避免请求过程中出现等待超时的问题。 在收到WebAPI的响应后,还需要对其进行解析和处理。HttpContent类提供了许多方法来获取返回的数据(如字符流、字节数组或者字符串)和解析JSON或XML格式的数据。可以将这些数据转换为相应的格式,然后在Winform应用程序中进行显示或其他操作。 总之,在Winform调用WebAPI需要使用HttpClient类发起请求和接收响应,并使用HttpContent类对返回的数据进行解析和处理。这样可以实现Winform应用程序与WebAPI的通信,从而获取所需的数据或执行某些操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值