C#WinForm实现WebApi接口服务
|
admin
2025年7月5日 10:19
本文热度 27
|
在项目中经常会用到各种通讯方式,现介绍一下WinForm实现WebApi接口服务,不依赖IIS宿主;编码道路虽然枯燥,只要我们坚定信念;时光会看见你的成长,也终将不负你的努力。↖(^ω^)↗
NuGet安装Microsoft.AspNet.WebApi.OwinSelfHost
请求路由Startup.cs
using Owin;
using System;
using System.Net.Http.Headers;
using System.Web.Http;
namespace FilterDemo
{
class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
try
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
catch (Exception ex)
{
throw ex;
}
}
}
}
接口方法HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
namespace FilterDemo
{
public class HomeController : ApiController
{
[HttpGet]
public IHttpActionResult Get(int address)
{
string str = "123466";
return Json(str);
}
[HttpPost]
public IHttpActionResult Post([FromBody] List<string> values)
{
Dictionary<string, object> dic = new Dictionary<string, object>();
try {
FormMain.TriggerEvent.Message = values;
FormMain.TriggerEvent.OnMessage();
dic.Add("flag", true);
dic.Add("msg", "成功");
} catch(Exception ex) {
dic.Add("flag", false);
dic.Add("msg", ex.Message);
}
return Json(dic);
}
[HttpPut]
public IHttpActionResult Put(int id, string value)
{
string str = "123466";
return Json(str);
}
[HttpDelete]
public IHttpActionResult Delete(int id)
{
string str = "123466";
return Json(str);
}
}
}
启动WebApi接口服务
#region WebApi接口服务
public static OWINTriggerEvent TriggerEvent { get; set; }
private IDisposable _webApp;
private string BaseUrl = "http://192.168.200.84:2000";
private void StartServer()
{
string serverIp = ConfigurationManager.AppSettings["ServerIP"];
string serverPort = ConfigurationManager.AppSettings["ServerPort"];
BaseUrl = $"http://{serverIp}:{serverPort}";
_webApp = WebApp.Start<Startup>(BaseUrl);
AppendLog($"服务已启动: {BaseUrl}");
var triggerEvent = new OWINTriggerEvent();
TriggerEvent = triggerEvent;
TriggerEvent.infoEvent += TriggerEvent_infoEvent;
}
private void TriggerEvent_infoEvent(object sender, EventArgs e)
{
try
{
List<string> msgList = TriggerEvent.Message;
AppendLog("接收到信息:"+ JsonConvert.SerializeObject(msgList));
foreach (var item in msgList)
{
loadPcdToImage(item);
AppendLog("处理点云文件:" + item);
}
}
catch (Exception ex)
{
throw;
}
}
private void StopServer()
{
_webApp?.Dispose();
AppendLog("服务已停止");
}
private void AppendLog(string message)
{
DateTime d = DateTime.Now;
string dateStr = d.ToString("yyyy-MM-dd HH:mm:ss:fff");
if (rtbLog.InvokeRequired)
rtbLog.BeginInvoke(new Action(() => rtbLog.AppendText(dateStr + " " + message + "\r\n")));
else
rtbLog.AppendText(dateStr + " " + message + "\r\n");
}
#endregion
Microsoft.AspNet.WebApi.OwinSelfHost是一个用于在非IIS环境下自托管ASP.NET Web API的NuGet包,它基于OWIN(Open Web Interface for .NET)规范实现。
以下是其主要特点和用法:
- 允许Web API脱离IIS运行,可在控制台应用、Windows服务等环境中托管
- 使用HttpListener作为底层HTTP服务器
- 支持完整的Web API功能,包括路由、控制器、过滤器等
- 安装方式
通过NuGet包管理器控制台执行命令:
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
这会自动安装相关依赖包,包括Microsoft.Owin.Host.HttpListener和Microsoft.AspNet.WebApi.Owin。
- 创建控制台应用程序项目(.NET Framework 4.0+)
- 比HttpSelfHost更灵活(支持中间件管道)
阅读原文:原文链接
该文章在 2025/7/7 11:43:43 编辑过