在Windows平台web服务一般托管于ISS。在开发中,会遇到需要上位机工程师提供对外API服务,本文将用WPF代码实现。

先看效果图

软件界面:

 服务界面

 

需要引入开发包

Microsoft.AspNet.WebApi.Client

Microsoft.AspNet.WebApi.Core

Microsoft.AspNet.WebApi.SelfHost

Newtonsoft.Json

下图为代码简单框架

 HttpService.cs:HTTP 服务类

HomeController.cs:控制器,用于相应WebApi响应

1.搭建WPF主界面

MainWindow.xaml

<Grid>
        <StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Port:" Margin="10"/>
                <TextBox x:Name="TextBox_Port" Text="8080" Width="100" Margin="10"/>
                <Button x:Name="Btn_Start" Content="开始" Width="50" Margin="10" Click="Btn_Start_Click"/>
                <Button x:Name="Btn_Stop" Content="结束" Width="50" Margin="10" Click="Btn_Stop_Click"/>
            </StackPanel>
        </StackPanel>
    </Grid>

2.MainWindow.xaml.cs

private HttpService _http;//服务对象

///打开
        private async void Btn_Start_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var port = Convert.ToInt32(TextBox_Port.Text);

                _http = new HttpService(port);

                await _http.StartHttpServer();
            }
            catch(Exception ex)
            {
                LogHelper.WriteLogByType(LogEnum.Error, ex.Message);
            }

        }

//关闭
        private async void Btn_Stop_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                await _http.CloseHttpServer();
                _http.Dispose();
            }
            catch (Exception ex)
            {
                LogHelper.WriteLogByType(LogEnum.Error, ex.Message);   
            }
        }

3.HTTP服务类代码

public class HttpService : IDisposable
    {
        /// <summary>
        /// 端口号
        /// </summary>
        public int Port { get;set; }

        /// <summary>
        /// Http self hosting
        /// </summary>
        private readonly HttpSelfHostServer _server;

        public HttpService(int port)
        {
            this.Port = port;
            var config = new HttpSelfHostConfiguration($"http://localHost:{this.Port}");

            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}");
            _server = new HttpSelfHostServer(config);
        }

        #region HTTP Service
        /// <summary>
        /// start HTTP server
        /// </summary>
        /// <returns></returns>
        public Task StartHttpServer()
        {
            return _server.OpenAsync();
        }
        /// <summary>
        /// Close HTTP service
        /// </summary>
        /// <returns></returns>
        public Task CloseHttpServer() 
        {
            return _server.CloseAsync(); 
        }
        #endregion

        
        public void Dispose()
        {
            _server.Dispose();
        }
    }

4.控制器代码

[RoutePrefix("api/home")]
    public class HomeController:ApiController
    {
        [Route("echo")]
        [HttpGet]
        public IHttpActionResult Echo(string name)
        {
            return Json(new { Name = name, Message = $"Hello,{name},action"});
        }
    }

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐