WPF中添加webapi

一、集成 SelfHost

现在已有的资料中,使用 SelfHost 做自宿主服务的基本都是用控制台实现 WebAPI 的功能,或者在 WinFrom 中集成。WFP 和这些还是有挺大的区别。 我这里是参考了这个文章:Self-Host 
具体的步骤如下: 
1. 添加引用包 
在 NuGet 中添加 “Microsoft.AspNet.WebApi.SelfHost”和“Microsoft.AspNet.WebApi.Cors”库,其他依赖的类库基本都会添加进来 
2. 初始化服务 
新建类 “InitConfig”在类里添加初始化自宿主的一些设置。 
具体代码如下:

public static HttpSelfHostConfiguration InitSelfHostConfig(string baseAddress)
        {
            // 配置 http 服务的路由
            // 地址实例:http://10.17.125.183:8848/api/home/PostMeasuring
            // 加了{action}后,一个类写多个方法
            HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(baseAddress);
            config.Routes.MapHttpRoute(
                "API Default", "api/{controller}/{action}/{id}",
                new { id = RouteParameter.Optional }
            );

            // 设置跨域
            var cors = new EnableCorsAttribute("*", "*", "*"); //跨域允许设置
            config.EnableCors(cors);

            config.Formatters
               .XmlFormatter.SupportedMediaTypes.Clear();

            //默认返回 json
            config.Formatters
                .JsonFormatter.MediaTypeMappings.Add(
                new QueryStringMapping("datatype", "json", "application/json"));

            //返回格式选择
            config.Formatters
                .XmlFormatter.MediaTypeMappings.Add(
                new QueryStringMapping("datatype", "xml", "application/xml"));

            //json 序列化设置
            config.Formatters
                .JsonFormatter.SerializerSettings = new
                Newtonsoft.Json.JsonSerializerSettings()
                {
                    //NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore,
                    DateFormatString = "yyyy-MM-dd HH:mm:ss" //设置时间日期格式化
                };
            return config;
        }

3. 添加 Program 类

WPF 默认是没有这个类的,需要自己手动添加这样的一个类。

这个类的代码:

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
    string baseAddress = string.Format("http://{0}:{1}/",
           System.Configuration.ConfigurationManager.AppSettings.Get("Domain"),
           System.Configuration.ConfigurationManager.AppSettings.Get("APIPort"));
    using (var server = new HttpSelfHostServer(InitConfig.InitSelfHostConfig(baseAddress)))
    {
        server.OpenAsync().Wait();
        Console.WriteLine(String.Format("host 已启动:{0}", baseAddress));
        //实例化主窗口
        App app = new App();
        app.Run();
    }
}

停止运行时想要完全退出程序需要在主窗口退出时间添加这个 (原理暂未理清)

 Environment.Exit(0);

其中 baseAddress 是拼接的服务地址,同时在“属性”里设置项目的启动对象为“Program”。

 

后面添加一些 API 进行测试。

public class HomeController : ApiController
{
        [Route("PostCCD")]
        [HttpPost]
        public object PostCCD([FromBody] string str)
        {
            
            return new { code = 1, success = true, msg = "成功" };
        }

        [Route("PostMeasuring")]
        [HttpPost]
        public object PostMeasuring([FromBody] string str)
        {
           
            return new { code = 1, success = true, msg = "成功" };

        }
}

注:添加API后需以管理员身份运行程序

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WPF(Windows Presentation Foundation)是一种用于创建Windows桌面应用程序的技术。而WebAPI是一种用于创建Web服务的框架。虽然WPF主要用于构建桌面应用程序,但我们可以使用WPF来生成WebAPI接口。 要生成WebAPI接口,我们可以按照以下步骤进行操作: 1. 创建WPF应用程序项目:在Visual Studio创建一个新的WPF应用程序项目。 2. 添加WebAPI控制器类:在项目添加一个控制器类,该类继承自System.Web.Http.ApiController,并实现所需的接口方法。在这些方法,我们可以定义需要接收的HTTP请求和返回的数据。 3. 配置WebAPI路由:在Global.asax文件配置WebAPI路由,以将HTTP请求路由到正确的控制器和方法。 4. 编写业务逻辑:在控制器方法,根据需求编写业务逻辑,可以连接数据库、调用其他服务等。 5. 运行应用程序:通过调试或发布应用程序,将其运行在本地的IIS或其他Web服务器上。 通过以上步骤,我们可以使用WPF生成WebAPI接口。此时,我们可以通过HTTP请求访问WPF应用程序的接口,并获取返回的数据。 需要注意的是,尽管我们可以使用WPF来生成WebAPI接口,但这并不是WPF的主要用途。如果只需要创建WebAPI接口,建议使用专门的Web开发框架,如ASP.NET Core等。以上所述仅为一种可能的解决方案,具体实现方式可能因项目需求和框架版本而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值