查看: 137|回复: 1

.NET控制台程序秒变asp.net core站点

[复制链接]

2

主题

11

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2023-1-18 13:22:17 | 显示全部楼层 |阅读模式
有个.NET控制台程序用来跑定时任务的,但是做好后需求发生变化,跑出的数据结果不能直接使用,数据需要转成json格式通过web接口来调用实现。这个控制台是个单体程序,没有封装,如果新建一个项目的话还得重新搭建框架和编写逻辑;如果能把控制台程序直接改成http://asp.net core api程序就好了。查阅相关资料发现可以实现,本文将介绍如何实现控制台程序变http://asp.net core api程序。

1、添加http://asp.net core包
首先需要添加http://asp.net core程序包,添加方法跟其他普通包一样。这也是.NET Core之后的模块化改进。添加可以通过nuget手动添加或控制台代码添加,包名是“Microsoft.AspNetCore.App”,添加的代码如下:
install-package Microsoft.AspNetCore.App2、在main方法中增加AspNetCore支持
在.net6之后控制台程序取消了main方法,当然也可以选择保留。主要是WebApplication组件和中间件组件,代码如下:
#region  网站var builder = WebApplication.CreateBuilder();  builder.Services.AddControllers(); // .AddApplicationPart(Assembly.Load(new AssemblyName(AssemblyName))); var app = builder.Build(); app.UseRouting(); app.UseEndpoints(endpoints => {endpoints.MapDefaultControllerRoute();});  app.Run();#endregion3、增加控制器
新建一个控制器Controllers文件夹,并在文件夹下面新建一个HomeControllers.cs文件。在文件代码中继承ControllerBase接口,并添加一个index测试接口和Controller特性。代码如下:
    [ApiController]    [Route("api/[controller]/[action]")]    public class HomeController : ControllerBase    {        [HttpGet]        public IActionResult Index()        {            return Ok("Hello World");        }    }这样http://asp.net core api程序就搭建好了,我们用dotnet run来运行一下。效果如下图:



4、封装代码
由于控制台有定时任务,所以把在main方法中增加的AspNetCore支持封装起来。关键代码如下:
    public class WebApiInit : IWebApiInit    {        public void WInit()        {            var builder = WebApplication.CreateBuilder();            builder.Services.AddControllers();               // .AddApplicationPart(Assembly.Load(new AssemblyName(AssemblyName)));            var app = builder.Build();            app.UseRouting();            app.UseEndpoints(endpoints =>            {                endpoints.MapDefaultControllerRoute();            });            app.Run();        }    }    public interface IWebApiInit    {        void WInit();    }//在mian方法中调用封装 这里使用了依赖注入的方法,调用了AspNetCore支持的封装。var services = new ServiceCollection();services.AddTransient<IWebApiInit, WebApiInit>();var serviceProvider = services.BuildServiceProvider();var initTest = serviceProvider.GetRequiredService<IWebApiInit>();initTest.WInit();5、结语
本文介绍如何在控制台中内嵌运行.NET Core Web APi。希望本文能给你带来收获,大家还有什么好方案吗?欢迎留言讨论。

版权声明:本文来源于网友收集或网友供稿,仅供学习交流之用,如果有侵权,请转告小编或者留言,本公众号立即删除。
关注公众号:DotNet开发跳槽❀觉得不错,请点个在看呀
回复

使用道具 举报

3

主题

9

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2023-1-18 13:22:32 | 显示全部楼层
牛!正好准备把自己写的一些东西做Web化[赞]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表