///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"))//確定數據庫名稱 (此處名稱為apollo設置,根據需要自行修改)
{
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
僅此,以作記錄。
