首页
学习
活动
专区
圈层
工具
发布

Wpf程序集成webapi

lWPF应用程序内部集成Web API和Swagger-UI

1. 选择自托管框架

Option 1:使用Kestrel(.NET 6+)

- 安装包:

Microsoft.AspNetCore.Server.Kestrel.Core

Swashbuckle.AspNetCore (Swagger支持)

- 创建Web宿主:

在WPF项目中添加 WebApplication 实例,示例:

private WebApplication _webApp;

// 启动API(在WPF窗口加载事件中)

private void StartWebApi()

{

  var builder = WebApplication.CreateBuilder(new string[] { });

  builder.WebHost.UseKestrel(options =>

  {

      options.Listen(IPAddress.Loopback, 5000); // 监听本地端口

  });

  // 配置Swagger

  builder.Services.AddEndpointsApiExplorer();

  builder.Services.AddSwaggerGen();

  var app = builder.Build();

  app.UseSwagger();

  app.UseSwaggerUI();

  // 添加API端点(示例)

  app.MapGet("/weatherforecast", () =>

  {

      return Enumerable.Range(1, 5).Select(index => new WeatherForecast

      {

          Date = DateTime.Now.AddDays(index),

          TemperatureC = Random.Shared.Next(-20, 55),

          Summary = Summaries[Random.Shared.Next(Summaries.Length)]

      });

  });

  _webApp = app;

  _ = app.RunAsync(); // 异步运行(避免阻塞UI线程)

}

// 停止API

private async void StopWebApi()

{

  if (_webApp != null)

  {

      await _webApp.StopAsync();

  }

}

2. 处理WPF线程问题

- 避免UI阻塞:

使用 async/await 或 Task.Run 启动/停止Web宿主,确保不阻塞UI线程。

- 跨线程访问:

若需在API中操作WPF控件,通过 Dispatcher 同步回UI线程:

app.MapGet("/updateui", () =>

{

  Application.Current.Dispatcher.Invoke(() =>

  {

      // 更新WPF界面元素(如文本框、列表等)

  });

  return "UI updated";

});

3. 嵌入Swagger-UI到WPF

Option 1:使用WebView2控件

- 安装包:

Microsoft.Web.WebView2

- XAML中添加控件:

  <Grid>

      <WebView2 x:Name="swaggerWebView" />

  </Grid>

- 加载Swagger页面:

在Web宿主启动后,通过 WebView2 加载本地地址:

swaggerWebView.Source = new Uri("http://localhost:5000/swagger");

4. 完整示例流程

1. 启动WPF应用,调用 StartWebApi() 初始化自托管API。

2. Swagger-UI通过WebView2显示,地址为 http://localhost:5000/swagger 。

3. API与WPF共享数据:

- API可访问WPF应用的业务逻辑或数据模型。

- 通过 Dispatcher 实现API对UI的更新。

注意事项

- 端口冲突:确保监听端口未被占用(如5000)。

- 性能影响:自托管API会增加WPF进程资源消耗,避免高并发场景。

- 安全限制:仅用于本地调试,生产环境需通过反向代理部署独立API服务。

如需更复杂的交互(如认证、动态路由),可结合 Autofac 等依赖注入框架优化架构。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OYpcQxWAOWMqrqOyZkBpB7AQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券