0

我的程序用于在 Windows 应用程序中自托管 Web API。由于我在网络服务方面没有太多经验,我请求有人帮助解决问题。

我可以成功制作控制台应用程序。但是当我将其更改为 Windows 应用程序时,我的 IDE 卡住了错误“应用程序处于中断模式”。

控制台程序;

using System.Web.Http;
using System.Web.Http.SelfHost;

主功能:


    var config = new HttpSelfHostConfiguration("http://localhost:8080");
                config.Routes.MapHttpRoute("API Default", "api/{controller}/{id}", new { id = RouteParameter.Optional });
    using (HttpSelfHostServer server = new HttpSelfHostServer(config))
    {
    server.OpenAsync().Wait();
    Console.WriteLine("Press Enter to quit.");  // Removed in Win Form
    Console.ReadLine(); // Removed in Win Form
    }

API 控制器类;我需要从“FromBody”属性接收数据。

 public class FieldsController : ApiController
    {
        [HttpPost]
        public void PostAction([FromBody] Field model)
        {
            int patientID;
            string name;
            string age;
            patientID = model.patientID;
            name = model.patientName;
            age = model.patientAge;
        }
    }
4

1 回答 1

0

你能更详细地说明你的错误吗?我也以类似的方式做过,我的一个正在工作。在项目的解决方案中,我为 webapi 添加了一个新的类库类型项目。从主 windowsForm 应用程序中,我正在调用 webapi。webapi项目如下:

using System;
using System.ServiceModel;
using System.Web.Http;
using System.Web.Http.SelfHost;

namespace MYWebAPI
{
    public class WebApiProgram : IDisposable
    {
        private string URL = "http://localhost:1234/";
        private HttpSelfHostServer server;

        public WebApiProgram()
        {

        }
        public WebApiProgram(string url)
        {
            this.URL = url;

        }

        public void Dispose()
        {
            server.CloseAsync().Wait();
        }

        public void Start()
        {

            var config = new HttpSelfHostConfiguration(URL);
            config.TransferMode = TransferMode.Streamed;

            AddAPIRoute(config);

            server = new HttpSelfHostServer(config);
            var task = server.OpenAsync();
            task.Wait();
            //Console.WriteLine("Web API Server has started at:" + URL);
            //Console.ReadLine();

        }

        private void AddAPIRoute(HttpSelfHostConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "ActionApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

        }
    }

从 main() [program.cs 文件] winform applition 我调用 webapi 启动函数。

static class Program
    {

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        private static void Main(string[] args)
        {
            //Start the webAPI
            WebApiProgram.StartMain();

            Thread.CurrentThread.CurrentCulture
                = Thread.CurrentThread.CurrentUICulture
                    = CultureInfo.InvariantCulture;

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            var mainForm = new MainForm();
            Application.Run(mainForm);
        }


    }
于 2020-01-08T10:33:53.517 回答