Hosting ASP.NET Core API in a Windows Forms Application

后端 未结 1 1313
萌比男神i
萌比男神i 2021-01-05 11:20

Background: I am working on a project that involves a WinForms app. The client wants to expose a local-only HTTP server to allow other apps to trigger functionality on a run

1条回答
  •  失恋的感觉
    2021-01-05 12:01

    Hosting ASP.NET CORE API in a Windows Forms Application and Interaction with Form

    Here is a basic step by step example about how to create a project to host ASP.NET CORE API inside a Windows Forms Application and perform some interaction with Form.

    To do so, follow these steps:

    1. Create a Windows Forms Application name it MyWinFormsApp
    2. Open Form1 in design mode and drop a TextBox on it.
    3. Change the Modifiers property of the textBox1 in designer to Public and save it.
    4. Install Microsoft.AspNetCore.Mvc package
    5. Install Microsoft.AspNetCore package
    6. Create a Startup.cs file in the root of the project, and copy the following code:

      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();
              }
          }
      }
      
    7. Copy the following code in 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();
          }
      }
      
    8. Create a folder called Controllers in the root of the project.

    9. Create ValuesController.cs in the Controllers folder and copy the following code to file:

      using System;
      using Microsoft.AspNetCore.Mvc;
      
      namespace MyWinFormsApp.Controllers
      {
          [Route("api/[controller]")]
          [ApiController]
          public class ValuesController : ControllerBase
          {
              [HttpGet]
              public ActionResult 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();
              }
          }
      }
      
    10. Run the application.

    11. Type "hi" in the textBox1
    12. Open browser and browse http://localhost:5000/api/values → You will see hi as response.
    13. http://localhost:5000/api/values/bye → You will see bye in textBox1

    0 讨论(0)
提交回复
热议问题