gpt4 book ai didi

c# - 在 Windows 窗体应用程序中托管 ASP.NET Core API

转载 作者:行者123 更新时间:2023-12-05 01:09:15 27 4
gpt4 key购买 nike

背景:我正在处理一个涉及 WinForms 应用程序的项目。客户端希望公开一个仅限本地的 HTTP 服务器,以允许其他应用程序通过 REST API(或类似的)在 WinForms 应用程序的运行实例上触发功能。首选是使用 ASP.NET Core 实现上述 API。

因此,我的问题是:如何构建一个项目以在同一进程中同时拥有 ASP.NET Core API 和 WinForms GUI?有什么陷阱我需要警惕吗?

最佳答案

在 Windows 窗体应用程序中托管 ASP.NET CORE API 并与窗体交互

下面是一个基本的分步示例,介绍如何创建一个项目以在 Windows 窗体应用程序中托管 ASP.NET CORE API,并与窗体执行一些交互。

为此,请按照下列步骤操作:

  • 创建一个 Windows 窗体应用程序,将其命名为 MyWinFormsApp
  • 开通 Form1在设计模式中并删除 TextBox在上面。
  • 更改 Modifiers textBox1 的属性(property)在设计师到 Public并保存它。
  • 安装 Microsoft.AspNetCore.Mvc包裹
  • 安装 Microsoft.AspNetCore包裹
  • 创建一个 Startup.cs项目根目录下的文件,复制以下代码:
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    namespace MyWinFormsApp
    {
    public class Startup
    {
    public Startup(IConfiguration configuration)
    {
    Configuration = configuration;
    }
    public IConfiguration Configuration { get; }
    public void ConfigureServices(IServiceCollection services)
    {
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    if (env.IsDevelopment())
    {
    app.UseDeveloperExceptionPage();
    }
    app.UseMvc();
    }
    }
    }
  • 将以下代码复制到 Program.cs :
    using System;
    using System.Threading;
    using System.Windows.Forms;
    using Microsoft.AspNetCore;
    using Microsoft.AspNetCore.Hosting;

    namespace MyWinFormsApp
    {
    public class Program
    {
    public static Form1 MainForm { get; private set; }

    [STAThread]
    public static void Main(string[] args)
    {
    CreateWebHostBuilder(args).Build().RunAsync();

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    MainForm = new Form1();
    Application.Run(MainForm);
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>();
    }
    }
  • 创建一个名为 Controllers 的文件夹在项目的根目录中。
  • 创建 ValuesController.csControllers文件夹并将以下代码复制到文件中:
    using System;
    using Microsoft.AspNetCore.Mvc;

    namespace MyWinFormsApp.Controllers
    {
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
    [HttpGet]
    public ActionResult<string> Get()
    {
    string text = "";
    Program.MainForm.Invoke(new Action(() =>
    {
    text = Program.MainForm.textBox1.Text;
    }));
    return text;
    }

    [HttpGet("{id}")]
    public ActionResult Get(string id)
    {
    Program.MainForm.Invoke(new Action(() =>
    {
    Program.MainForm.textBox1.Text = id;
    }));
    return Ok();
    }
    }
    }
  • 运行应用程序。
  • textBox1 中输入“hi”
  • 打开浏览器浏览http://localhost:5000/api/values → 你会看到 hi作为回应。
  • http://localhost:5000/api/values/bye → 你会看到 byetextBox1
  • 关于c# - 在 Windows 窗体应用程序中托管 ASP.NET Core API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60033762/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com