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

1、添加asp.net core包

首先需要添加asp.net core程序包,添加方法跟其他普通包一样。这也是.NET Core之后的模块化改进。添加可以通过nuget手动添加或控制台代码添加,包名是“Microsoft.AspNetCore.App”,添加的代码如下:

install-package Microsoft.AspNetCore.App

2、在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();
#endregion

3、增加控制器

新建一个控制器Controllers文件夹,并在文件夹下面新建一个HomeControllers.cs文件。在文件代码中继承ControllerBase接口,并添加一个index测试接口和Controller特性。代码如下:

    [ApiController]
[Route("api/[controller]/[action]")]
public class HomeController : ControllerBase
{
[HttpGet]
public IActionResult Index()
{
return Ok("Hello World");
}
}

这样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。希望本文能给你带来收获,大家还有什么好方案吗?欢迎留言讨论。

.NET控制台程序秒变asp.net core站点的更多相关文章

  1. 控制台程序秒变Windows服务(Topshelf)

    项目中有些时候需要写服务,一般我们都是先创建控制台程序,测试,运行,成功之后再创建windows服务程序,这样好麻烦啊,有没有简单的控制台程序直接变成Widnows服务,经过查找,找到了Topshel ...

  2. dotnet run是如何启动asp.net core站点的

    在曾经的 asp.net 5 过渡时期,运行 asp.net 5 站点的命令是dnx web:在如今即将到来的 asp.net core 时代,运行 asp.net core 站点的命令是dotnet ...

  3. .NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点

    在将“.NET跨平台之旅”示例站点 about.cnblogs.com 从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0 (博文链接)之后,我们有一个难以抗拒的冲动 —— 体验 ...

  4. DataProtection设置问题引起不同ASP.NET Core站点无法共享用户验证Cookie

    这是这两天ASP.NET Core迁移中遇到的一个问题.2个ASP.NET Core站点(对应于2个不同的ASP.NET Core Web应用程序),2个站点都可以登录,但在其中任1个站点登录后,在当 ...

  5. .NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上

    今天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站点部署到了 Linux 服务器上,这是我们解决了在 .NET Core 上使用 EnyimMem ...

  6. .NET跨平台之旅:生产环境中第2个跑在Linux上的ASP.NET Core站点

    今天我们在生产环境中上线了第2个跑在Linux上的ASP.NET Core站点.这是一个简单的Web API站点,通过命令行的方式调用安装在Linux服务器上的程序完成操作.之前用的是nodejs,现 ...

  7. 以self-contained方式在Linux上部署ASP.NET Core站点

    今天准备将一个在Windows上用VS2015开发的ASP.NET Core程序部署到阿里云Linux服务器上,部署时发现这台服务器是内网服务器,无法直接安装.NET Core SDK,于是想到尝试用 ...

  8. Cenos7 部署asp.net core站点

    系统版本 rpm -q centos-release --- centos-release--5.1804.el7.centos.x86_64 安装libicu yum install libunwi ...

  9. .NET跨平台之旅:在生产环境中上线第一个运行于Linux上的ASP.NET Core站点

    2016年7月10日,我们在生产环境中上线了第一个运行于Linux上的ASP.NET Core站点,这是一个简单的提供后端服务的ASP.NET Core Web API站点. 项目是在Windows上 ...

  10. 用"hosting.json"配置ASP.NET Core站点的Hosting环境

    通常我们在 Prgram.cs 中使用硬编码的方式配置 ASP.NET Core 站点的 Hosting 环境,最常用的就是 .UseUrls() . public class Program { p ...

随机推荐

  1. k3s安装kubernetes环境

    官方文档:https://docs.rancher.cn/k3s/ 官方文档:https://rancher.com/docs/k3s/latest/en/installation/install-o ...

  2. python之路56 dajngo最后一天 csrf跨站请求 auth模块登录注册方法

    csrf跨站请求伪造 钓鱼网站:模仿一个正规的网站 让用户在该网站上做操作 但是操作的结果会影响到用户正常的网站账户 但是其中有一些猫腻 eg:英语四六级考试需要网上先缴费 但是你会发现卡里的钱扣了但 ...

  3. emqtt-bench

    安装 安装环境:Centos7 安装包:emqtt-bench-0.4.6-alpha.2-centos7-amd64.tar.gz 建议使用已编译好的发行包进行安装,源码编译已踩坑. # 创建存放目 ...

  4. SSM框架——Spring

    Spring 轻量级.非侵入式的框架 支持控制反转(IOC).面向切面编程(AOP) 支持事务的处理和声明.框架整合 1.HelloSpring(入门) 1.1导入依赖 <!-- https:/ ...

  5. 05-Sed操作参数(II)

    1 Sed操作参数 1.1 q 参数q表示跳离sed [address1]q sed执行跳离动作的时候,会停止输入pattern space数据,同时停止数据送到标准输出文件. 例1 对于文件执行sc ...

  6. 安装部署Java项目

    开头:之前做了个文档转换的小项目,想部署在安卓手机上,自己可以随时看看,所以才有了下面这篇文章,内容或有瑕疵,望请批正.文末放我自己部署文档转换网址,仅供大家参考,谢谢! 选择:Termux 还是 L ...

  7. shell基础命令知识持续更新

    查看系统支持的shell cat /etc/shells [root@iZwz9almo8p830btq7voo9Z shellLearning]# cat /etc/shells /bin/sh / ...

  8. Java 进阶P-1.3+P-1.4

    成员变量和成员函数 成员变量 类定义了对象中所具有的变量,这些变量称作成员变量 每个对象都有自己的变量,和同一个类的其他对象是分开的 成员方法 在 Java 语言中使用成员方法对应于类对象的行为.以 ...

  9. GF_CLR初始用 - 正式版

    参照:DeerGF_Wolong框架使用教程 与tackor老哥的踩坑日记所编写,第二次尝试,总结第一次经验重新来. 点击链接加入群聊[Gf_Wolong热更集合] 一. 部署 HybridCLR(W ...

  10. 【分析笔记】Linux 4.9 backlight 子系统分析

    相关信息 内核版本:Linux version 4.9.56 驱动文件:lichee\linux-4.9\drivers\video\backlight\backlight.c 驱动作用 对上,面对应 ...