关于如何用WPF实现WebApi自托管服务及交互

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

先看效果图

软件界面:

关于如何用WPF实现WebApi自托管服务及交互_第1张图片

 服务界面

关于如何用WPF实现WebApi自托管服务及交互_第2张图片

 

需要引入开发包

Microsoft.AspNet.WebApi.Client

Microsoft.AspNet.WebApi.Core

Microsoft.AspNet.WebApi.SelfHost

Newtonsoft.Json

下图为代码简单框架

关于如何用WPF实现WebApi自托管服务及交互_第3张图片

 HttpService.cs:HTTP 服务类

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

1.搭建WPF主界面

MainWindow.xaml


        
            
                
                
                

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
    {
        /// 
        /// 端口号
        /// 
        public int Port { get;set; }

        /// 
        /// Http self hosting
        /// 
        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
        /// 
        /// start HTTP server
        /// 
        /// 
        public Task StartHttpServer()
        {
            return _server.OpenAsync();
        }
        /// 
        /// Close HTTP service
        /// 
        /// 
        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"});
        }
    }

你可能感兴趣的:(microsoft)