C# web api 服务怎么嵌入到C# windows应用程序中?

terry三 2022-03-31 10:13:47

请教很菜问题,我建一个WEB API服务,提供处理外部POST业务,我想建立C# windows应用程序,来启用WEB API服务并做一些其它业务处理?

...全文
773 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
terry三 2022-04-02
  • 打赏
  • 举报
回复

/*
[assembly: System.Reflection.AssemblyCompanyAttribute("DingControl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("DingControl")]
[assembly: System.Reflection.AssemblyTitleAttribute("DingControl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
*/ 解决了,桌面程序可以启用了,

terry三 2022-04-02
  • 打赏
  • 举报
回复

照做的,还是有错识呢

img

wanghui0380 2022-04-01
  • 打赏
  • 举报
回复 2

有要放假了,放假前都木啥事。闲着也是闲着,直接做个demo

img


项目说明
1.整个WebSupport文件夹其实就是原封不动的把新建webapi的脚手架代码搬过来了(/WeatherForecast 应该都看着眼熟是吧)
2.Form1 代码

 public partial class Form1 : Form
    {
        private Lazy<IHost> webhost=new Lazy<IHost>(() => { return CreateHostBuilder().Build(); });
        //这里是直接搬的programs的代码,看着也眼熟对吧
        public static IHostBuilder CreateHostBuilder() =>
            Host.CreateDefaultBuilder()
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    //这里是新增的,我用Kestrel做http传输层,监听9527端口
                    webBuilder.UseKestrel(o => { o.ListenAnyIP(9527); });
                    webBuilder.UseStartup<Startup>();
                });
        public Form1()
        {
            InitializeComponent();
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            //按你的要求,通过按钮启动他
            
                await webhost.Value.StartAsync();
          
           

           
        }
    }

好了,点击按钮启动他,如果他没有异常的话,现在你可以打开浏览器访问了
访问结果是这样的

img

wanghui0380 2022-03-31
  • 打赏
  • 举报
回复 1

1.vs2019 新建net5 windows项目
2.nuget Microsoft.AspNetCore.Owin 版本5.0.15 该版本是net5支持
3.nuget Microsoft.AspNetCore.Server.Kestrel 版本是2.2.0,因为是net strand版本所以框架通用

//本身我们可以跟maui那样直接改造windows项目把整个windows都变成依赖通用 host的项目,不过因为是做demo,我就不打算那么做了
//我直接从Form1里开始写代码了

form1 放入一个button

 public partial class Form1 : Form
    {
        private Lazy<IWebHost> webhost=new Lazy<IWebHost>(() =>
        {
            //其实这里的具体实现,你完全可以把你现在那个webapi的progarm.cs里的东西搬过来
            //因为是演示,所以我不想写太多代码
            WebHostBuilder webHostBuilder=new WebHostBuilder();
            webHostBuilder.UseKestrel();//我直接启用kestrel做http传输层
            
            webHostBuilder.ConfigureServices(service =>
            {
                ////我不想写太多东西,所以这里我就不配了
               
            });
            webHostBuilder.ConfigureAppConfiguration(config =>
            {
                //我不想写太多东西,所以这里我就不配了

            });
            return webHostBuilder.Build();

        });
        public Form1()
        {
            InitializeComponent();
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            //纯展示,我就不注入serverState这类了,你可以在上面实现整个单例去监控server运行状态
            if (webhost.Value.Services.GetServices<serverState>().state)
            {
                //启动
                await webhost.Value.StartAsync();
            }
            else
            {
                 //停止
            await webhost.Value.StopAsync();
            }

           

           
        }
    }
}

wanghui0380 2022-03-31
  • 打赏
  • 举报
回复 1

我新起回复(那个回复的地方,貌似不让写代码)
不需要,你既然看到了这个代码,就无需拘泥。他能在program.cs里写 webhostBuilder,你为啥不可以在任何地方写呢

当然是可以的,如果我说,我可以在引用了那两个dll以后,我可以在一个winform 的form窗体里

Lazy webhost=//这里我省略builder过程

任何在你的button按钮事件里写
webhost.StartAsync() //启动他

webhost.StopAsync()//停止他

ps:代码我随手写的,你能明白意思就可以了

terry三 2022-03-31
  • 打赏
  • 举报
回复

我还有点疑惑,我是VS2019 建立 Aap.NET Core Web Api 项目,产生产控制台程序,可以正常提供POST访问,

img


我想把WEBapi 服务嵌入到 我的.NET 5.0 桌面应用程序中,进行启动和停止WEBAPI服务,不然一个项目要启动两个程序。

wanghui0380 2022-03-31
  • 打赏
  • 举报
回复 1

并不菜,在相当长的一段时间内那软都是分离策略,使用他的默认方案都是iis承载,只有在大概16年以后才跟着spring boot那样学习了通用host环境的owin---------spring boot很早就和tomcat脱钩了,他很早就可以使用任意server承载,甚至是一个控制台自我承载http
owin---通用http host环境,这样你可以在任意程序里承载http方面的处理,当然在传统课堂里和传统教程里,这种16年以后才出现的东西就不在那些资料里出现了

nuget:
Microsoft.AspNetCore.Owin
Microsoft.AspNetCore.Server.Kestrel
当你在你的windows程序里,直接nuget这两个库以后,他就可以自己承载http服务,也可以自己承载webapi,并且开发方式完全兼容你现在webapi(对,你可以直接把你现在的web api代码,原封不动的copy到windows程序里,这个windows程序自己就具备iis的功能,可以直接对外提供http服务)

基本开发方式
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/owin?view=aspnetcore-3.1
完全兼容现有的开发方式

如果你还是看不明白,那就看官办demo
https://github.com/dotnet/AspNetCore.Docs/tree/main/aspnetcore/fundamentals/owin/sample

demo为你演示了怎么用控制台承载现有的asp.net-----------当然既然控制台都可以承载asp.net,你的windows自然也可以独立承载

ps:如果是net6的话,其实本身就已经无所谓用不用iis了,任意程序皆可以内置承载http

terry三 2022-03-31
  • 举报
回复
@wanghui0380 好东东,要试试。感谢
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧