winForm调用WebApi程序

WinForm窗体创建的调用api的类  /// <summary>
        /// 调用api返回json
        /// </summary>
        /// <param name="url">api地址</param>
        /// <param name="jsonstr">接收参数</param>
        /// <param name="type">类型</param>
        /// <returns></returns>
        public static string HttpPost(string url, string jsonstr)//,string type
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //--需要封装的参数
            request.CookieContainer = new CookieContainer();
            //以下是发送的http头
            request.Referer = "";
            //request.ContentType = "text/xml";
            request.Headers["Accept-Language"] = "zh-CN,zh;q=0.";
            request.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";
            request.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1";
            request.KeepAlive = true;
            //上面的http头看情况而定,但是下面俩必须加
            request.ContentType = "application/x-www-form-urlencoded";
            Encoding encoding = Encoding.UTF8;//根据网站的编码自定义
            request.Method = "get";  //--需要将get改为post才可行
            string postDataStr;
            //Stream requestStream = request.GetRequestStream();
            if (jsonstr != "")
            {
                postDataStr = jsonstr;//--需要封装,形式如“arg=arg1&arg2=arg2”
                byte[] postData = encoding.GetBytes(postDataStr);//postDataStr即为发送的数据,
                //request.ContentLength = postData.Length;  //写入后不允许设置此属性
                //requestStream.Write(postData, 0, postData.Length);
            }
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();  //远程服务器返回错误: (405) 不允许的方法/远程服务器返回错误: (500) 内部服务器错误。
            Stream responseStream = response.GetResponseStream();

            StreamReader streamReader = new StreamReader(responseStream, encoding);
            string retString = streamReader.ReadToEnd();

            streamReader.Close();
            responseStream.Close();
            return retString;

        }

 API程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace webApi_test2.Models
{
   //方法接口
    public interface IUsersRepository
    {
        Task<Users> GetUser(string id);
        Task<int> DeleteUser(string ID);
        Task<int> AddAUsers(Users item);
        Task<int> UpdateUsers(Users item);
    }
}

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace webApi_test2.Models
{
    //实体类
    public class Users
    {
        public string UserID { get; set; }
        public string Pwd { get; set; }
        public string UserName { get; set; }
        public string Remark { get; set; }
        public DateTime CreatedOn { get; set; }
        public DateTime LastLoginTime { get; set; }
    }
}

 

using Ivony.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace webApi_test2.Models
{
    //接口的实现 (接口的实现方法根据框架的结构自行修改)
    public class UsersRepository : IUsersRepository
    {
        //查询
        public async Task<Users> GetUser(string id)
        {
            using (Db.UseDatabase("default"))
            {
                var x = Db.T($"select * from Users where UserID={id}").ExecuteEntityAsync<Users>();
                return await x;
            }
        }
        //删除
        public async Task<int> DeleteUser(string ID)
        {
            using (Db.UseDatabase("default"))
            {
                return await Db.T($"delete from Users where UserID={ID}").ExecuteNonQueryAsync();
            }
        }
        //添加
        public async Task<int> AddAUsers(Users UsersItem)
        {
            using (Db.UseDatabase("default"))
            {
                return await Db.T($"insert into Users(UserID,Pwd,UserName,CreatedOn) values({UsersItem.UserID},{UsersItem.Pwd},{UsersItem.UserName},{UsersItem.CreatedOn})").ExecuteNonQueryAsync();
            }
        }
        //修改
        public async Task<int> UpdateUsers(Users UserItem)
        {
            using (Db.UseDatabase("default"))
            {
                return await Db.T($"update Users set Pwd={UserItem.Pwd},UserName={UserItem.UserName},CreatedOn={UserItem.CreatedOn} where UserID={UserItem.UserID}").ExecuteNonQueryAsync();
            }
        }
    }
}

 创建Api控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using Ivony.Data;
using Microsoft.AspNetCore.Mvc;
using webApi_test2.Models;

namespace webApi_test2.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        //接口的依赖注入根据自己框架的要求进行注入  本框架使用自己的源,与其他稍有不同
        private IUsersRepository _Repository { get; set; }
        public ValuesController(IUsersRepository Repository)
        {
            _Repository = Repository;
        }

        //GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        [HttpGet("{id}")]
        public ActionResult<string> Get(int id)
        {
            return "value";
        }

        // POST api/values
        [HttpPost]
        public void Post([FromBody] string value)
        {
        }
        // PUT api/values/5
        [HttpPut("{id}")]
        public void Put(int id, [FromBody] string value)
        {
        }
        //删除
        // DELETE api/values/5
        [HttpGet("Delete")]
        public int Delete(string id)
        {
            try
            {
                //UsersRepository ur = new UsersRepository();
                //var x = ur.DeleteUser(id);

                var x = _Repository.DeleteUser(id);

                return x.Result;
            }
            catch(Exception ex)
            {
                throw;
            }

        }
        //修改
        [HttpGet("UpdateUsers")]
        public async Task<int> UpdateUsers(string UserID, string UserName, string Pwd, string CreatedOn)/*Users UserItem*/
        {
            Users UserItem = new Users();
            try
            {
                //初始化赋值
                UserItem.UserID = UserID;
                UserItem.Pwd = Pwd;
                UserItem.UserName = UserName;
                UserItem.CreatedOn = Convert.ToDateTime(CreatedOn);

                //UsersRepository ur = new UsersRepository();
                //var x = ur.UpdateUsers(UserItem);

                var x = _Repository.UpdateUsers(UserItem);
                return await x;
            }
            catch (Exception)
            {
                throw;
            }
        }
        //查询 根据UserID查询
        [HttpGet("GetUser")]
        public async Task<Users> GetUser(string UserID)
        {
            try
            {
                //UsersRepository ur = new UsersRepository();
                //var x = ur.GetUser(UserID);

                var x = _Repository.GetUser(UserID);
                return await x;

                //return await _Repository.GetUser(UserID);
            }
            catch (Exception)
            {
                throw;
            }
        }
        //添加
        //GET:/api/values/Get
        [HttpGet("AddUsers")]
        public async Task<int> AddUsers(string UserID, string UserName, string Pwd, string CreatedOn)/*Users Item*/
        {
            Users UserItem = new Users();
            try
            {
                UserItem.UserID = UserID;
                UserItem.Pwd = Pwd;
                UserItem.UserName = UserName;
                UserItem.CreatedOn = Convert.ToDateTime(CreatedOn);
                //UsersRepository ur = new UsersRepository();
                //var x = ur.AddAUsers(UserItem);
                var x = _Repository.AddAUsers(UserItem);
                return await x;
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}

 依赖注入需要的类

using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Nebula.Hosting;
using webApi_test2.Models;

[assembly: HostInitialize(typeof(webApi_test2.Models.ServiceInitialize))]//webApi_test2.Models.ServiceInitialize 文件位置
namespace webApi_test2.Models
{
    internal class ServiceInitialize
    {
        public static void Initialize(IServiceCollection services)
        {
            services.AddSingleton<IUsersRepository, UsersRepository>();
        }
    }
}

 WinForm调用api程序方法来源于

https://www.cnblogs.com/mq0036/p/10437993.html

 

仅此,以作记录。

 

 

 

原文地址:https://www.cnblogs.com/A-R-E-S/p/10986351.html

时间: 2024-10-14 09:36:25

winForm调用WebApi程序的相关文章

Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解

最近一直在整合WebAPI.Winform界面.手机短信.微信公众号.企业号等功能,希望把它构建成一个大的应用平台,把我所有的产品线完美连接起来,同时也在探索.攻克更多的技术问题,并抽空写写博客,把相应的技术心得和成果进行一定的介绍,留下开拓的印记.本文主要介绍混合框架整合Web API应用过程中,分析Winform界面如何一步步对Web API的调用处理的. 1.Winform界面的应用方向 在很多场合,分布式采用Web方式构建应用,不过相对Winform来说,Web界面的体验性没有那么好,界

Winform简单调用WebApi

WebAPI  Controllers public class SimuController : ApiController { //EF 5 BIM_GENERALDICTONARY_DBEntities entities=new BIM_GENERALDICTONARY_DBEntities(); // GET api/Simu public IEnumerable<T_BIM_PropityClass> Get() { return entities.T_BIM_PropityClas

如何使用程序调用webApi接口

如何使用程序调用webApi接口 在C#中,传统调用HTTP接口一般有两种办法: WebRequest/WebResponse组合的方法调用 WebClient类进行调用. 第一种方法抽象程度较低,使用较为繁琐:而WebClient主要面向了WEB网页场景,在模拟Web操作时使用较为方便,但用在RestFul场景下却比较麻烦,在Web API发布的同时,.NET提供了两个程序集:System.Net.Http和System.Net.Http.Formatting.这两个程序集中最核心的类是Htt

Async Await异步调用WebApi

先铺垫一些基础知识 在 .net 4.5中出现了 Async Await关键字,配合之前版本的Task 来使得开发异步程序更为简单易控. 在使用它们之前 我们先关心下 为什么要使用它们.好比 一个人做几件事,那他得一件一件的做完,而如果添加几个人手一起帮着做 很显然任务会更快的做好.这就是并行的粗浅含义. 在程序中,常见的性能瓶颈在于 NetWork I/O 瓶颈 , CPU 瓶颈, 数据库I/O瓶颈,这些瓶颈使得我们的程序运行的很慢,我们想办法去优化.因为并行开发本身就加重CPU负担,所以一般

调用webapi 错误:使用 HTTP 谓词 POST 向虚拟目录发送了一个请求,而默认文档是不支持 GET 或 HEAD 以外的 HTTP 谓词的静态文件。的解决方案

第一次调用webapi出错如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>IIS 7.5 详细错误 - 4

跨域学习笔记1--跨域调用webapi

在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案. 通过自己的研究以及在网上看了一些大神的博客,写了一个Demo 首先新建一个webapi的程序,如下图所示: 由于微软已经给我们搭建好了webapi的环境,所以我们不必去添加引用一些dll,直接开始写代码吧. 因为这只是做一个简单的Demo,并没有连接数据库. 第一步我们要在Models文件夹里添加一个实体类Employees,用来存放数据. Employees.cs里的内容如下: 1 using System; 2

Winform调用QQ发信息并且开机启动 (开源)

前言 公司CS系统需要加入启动qq从winform调用qq聊天窗口的功能,前提是需要将聊天者的QQ号码作为参数传递到函数中,一直没有搞过,正好很感兴趣,就折腾,Winform调用qq,我想肯定是需要一些编码思路,下面列出编码前思路图 检查QQ安装后在注册表中的具体路径 根据注册表找到调用QQ程序的exe完整路径(Timwp.exe) 启动,达到winform调用QQ的要求 先看简单测试界面 步骤1 找到QQ的注册表路径,经过百度之后分析得到思路,正确的路径 32位QQ安装后注册表路径SOFTWA

跨域调用webapi

web端跨域调用webapi 在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案. 通过自己的研究以及在网上看了一些大神的博客,写了一个Demo 首先新建一个webapi的程序,如下图所示: 由于微软已经给我们搭建好了webapi的环境,所以我们不必去添加引用一些dll,直接开始写代码吧. 因为这只是做一个简单的Demo,并没有连接数据库. 第一步我们要在Models文件夹里添加一个实体类Employees,用来存放数据. Employees.cs里的内容如下: 1

跨域调用webapi web端跨域调用webapi

https://www.baidu.com/s?ie=UTF-8&wd=webapi%20%E8%B7%A8%E5%9F%9F web端跨域调用webapi 在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案. 通过自己的研究以及在网上看了一些大神的博客,写了一个Demo 首先新建一个webapi的程序,如下图所示: 由于微软已经给我们搭建好了webapi的环境,所以我们不必去添加引用一些dll,直接开始写代码吧. 因为这只是做一个简单的Demo,并没有连接数据库.