引用的Dll
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL5FEVPNTTU10MNpHW3BjMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2UDN0ITNwAjM2ETNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
添加配置文件packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.6" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.6" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.SelfHost" version="5.2.6" targetFramework="net461" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net461" />
</packages>
新建Controller文件夹里面的ValuesConntroller.cs类
[RoutePrefix("api/values")]
public class ValuesController : ApiController
{
[HttpGet]
[Route("st")]
public string GetServerTim(string id)
{
try
{
string result = Program.FormCheck.GetJsonById(id);
return result;
}
catch
{
return "failed :"+ id;
}
}
protected HttpRequestBase GetRequest()
{
HttpContextBase context = (HttpContextBase)Request.Properties["MS_RequestContext"];//获取传统context
HttpRequestBase request = context.Request;//定义传统request对象
return request;
}
private string GetClientIp(HttpRequestMessage request = null)
{
request = request ?? Request;
if (request.Properties.ContainsKey("MS_HttpContext"))
{
return ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
}
else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
{
RemoteEndpointMessageProperty prop = (RemoteEndpointMessageProperty)request.Properties[RemoteEndpointMessageProperty.Name];
return string.Format("Address:{0}, Port: {1}", prop.Address, prop.Port.ToString());
}
else if (HttpContext.Current != null)
{
return HttpContext.Current.Request.UserHostAddress;
}
else
{
return null;
}
}
}
Program类中这样写
public static class Program
{
public static CheckInterface FormCheck = null;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
FormCheck = new CheckInterface();
Application.Run(FormCheck);
}
}
Form中这样写
HttpSelfHostConfiguration config = null;
HttpSelfHostServer server = null;
public CheckInterface()
{
InitializeComponent();
renderDgv_Interface.AllowUserToAddRows = false;
}
private void CheckInterface_Load(object sender, EventArgs e)
{
RefreshWebApi();
}
private void RefreshWebApi()
{
config = new HttpSelfHostConfiguration(Url);// "http://192.168.0.163:8085");
config.Routes.MapHttpRoute("API Default", "api/{controller}/{id}", new { id = RouteParameter.Optional });
server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
}
启动之后浏览器访问http://192.168.0.163:8085/api/values?id=001即可看到weiapi接口已经成功在Winform上运行。
如果想要访问Webapi执行方法与WinformUI界面交互,用委托另外还要判断几个属性
delegate void DAddRdgvData(List<JsonData> DataSourse);
private void AddRdgvData(List<JsonData> DataSourse)
{
if (renderDgv_Interface.InvokeRequired)
{
while (!this.renderDgv_Interface.IsHandleCreated)
{
if (this.renderDgv_Interface.Disposing || this.renderDgv_Interface.IsDisposed)
return;
}
DAddRdgvData d = new DAddRdgvData(AddRdgvData);
this.renderDgv_Interface.Invoke(d, new object[] { DataSourse });
}
else
{
for (int i = 0; i < DataSourse.Count; i++)
{
if (ListId.Contains(DataSourse[i].Id))
{
for (int j = 0; j < renderDgv_Interface.RowCount; j++)
{
if (renderDgv_Interface.Rows[j].Cells["rdgv_Interface_id"].Value != null)
{
if (DataSourse[i].Id.Equals(renderDgv_Interface.Rows[j].Cells["rdgv_Interface_id"].Value.ToString()))
{
renderDgv_Interface.Rows[j].Cells["rdgv_Name"].Value = DataSourse[i].Name;
renderDgv_Interface.Rows[j].Cells["rdgv_Time"].Value = DataSourse[i].Time;
renderDgv_Interface.Rows[j].Cells["Rdgv_NumberTimes"].Value = DataSourse[i].Numberoftimes;
renderDgv_Interface.Rows[j].Cells["rdgv_Return"].Value = DataSourse[i].CheckResult;
}
}
}
}
else
{
//这里向控件传数据
}
}
}
}