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

在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"});
        }
    }

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WPF(Windows Presentation Foundation)是一种用于创建Windows应用程序的框架,它提供了丰富的图形性能和交互性能,使得开发人员可以轻松地构建现代化且具有吸引力的用户界面。WPF具有强大的UI设计和布局功能,能够自定义样式、主题和动画效果,使应用程序的用户界面更加吸引人。 WebAPI是一种用于构建Web服务的框架,它可以通过HTTP协议实现与客户端之间的通信。WebAPI基于REST原则,使用简洁的HTTP方法(如GET、POST、PUT、DELETE等)来执行各种操作。它能够返回各种格式的数据,如XML、JSON等,并支持身份验证和授权等常见的Web开发功能。 将WPFWebAPI结合使用可以实现丰富的客户端-服务器应用程序。WPF作为客户端应用程序的前端,负责呈现用户界面、处理用户交互和数据展示。WebAPI作为后端服务,负责处理客户端的请求,执行业务逻辑并提供数据。两者之间通过HTTP通信进行数据传输,可以实现实时数据更新和双向通信。 借助于WPF的强大的UI设计和交互性能,开发人员可以创建直观而灵活的用户界面,与WebAPI进行数据交互,并实现数据的展示和操作。通过WPF的数据绑定机制,可以轻松地将WebAPI返回的数据绑定到UI元素上,实现数据的实时更新和展示。 总之,WPFWebAPI相互结合能够实现流畅且响应迅速的客户端-服务器应用程序。WPF提供了强大的UI设计和交互性能,而WebAPI则提供了灵活的后端服务,通过这种结合可以满足各种复杂的应用程序需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值