.NET控制台程序秒变asp.net core站点
有个.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站点的更多相关文章
- 控制台程序秒变Windows服务(Topshelf)
项目中有些时候需要写服务,一般我们都是先创建控制台程序,测试,运行,成功之后再创建windows服务程序,这样好麻烦啊,有没有简单的控制台程序直接变成Widnows服务,经过查找,找到了Topshel ...
- dotnet run是如何启动asp.net core站点的
在曾经的 asp.net 5 过渡时期,运行 asp.net 5 站点的命令是dnx web:在如今即将到来的 asp.net core 时代,运行 asp.net core 站点的命令是dotnet ...
- .NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点
在将“.NET跨平台之旅”示例站点 about.cnblogs.com 从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0 (博文链接)之后,我们有一个难以抗拒的冲动 —— 体验 ...
- DataProtection设置问题引起不同ASP.NET Core站点无法共享用户验证Cookie
这是这两天ASP.NET Core迁移中遇到的一个问题.2个ASP.NET Core站点(对应于2个不同的ASP.NET Core Web应用程序),2个站点都可以登录,但在其中任1个站点登录后,在当 ...
- .NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上
今天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站点部署到了 Linux 服务器上,这是我们解决了在 .NET Core 上使用 EnyimMem ...
- .NET跨平台之旅:生产环境中第2个跑在Linux上的ASP.NET Core站点
今天我们在生产环境中上线了第2个跑在Linux上的ASP.NET Core站点.这是一个简单的Web API站点,通过命令行的方式调用安装在Linux服务器上的程序完成操作.之前用的是nodejs,现 ...
- 以self-contained方式在Linux上部署ASP.NET Core站点
今天准备将一个在Windows上用VS2015开发的ASP.NET Core程序部署到阿里云Linux服务器上,部署时发现这台服务器是内网服务器,无法直接安装.NET Core SDK,于是想到尝试用 ...
- Cenos7 部署asp.net core站点
系统版本 rpm -q centos-release --- centos-release--5.1804.el7.centos.x86_64 安装libicu yum install libunwi ...
- .NET跨平台之旅:在生产环境中上线第一个运行于Linux上的ASP.NET Core站点
2016年7月10日,我们在生产环境中上线了第一个运行于Linux上的ASP.NET Core站点,这是一个简单的提供后端服务的ASP.NET Core Web API站点. 项目是在Windows上 ...
- 用"hosting.json"配置ASP.NET Core站点的Hosting环境
通常我们在 Prgram.cs 中使用硬编码的方式配置 ASP.NET Core 站点的 Hosting 环境,最常用的就是 .UseUrls() . public class Program { p ...
随机推荐
- python 实现RSA公钥加密,私钥解密
from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5 from Cryp ...
- 侦察工具——Httrack
前言 web渗透学习笔记,实验环境为Metasploitable靶机上的DVWA.此随笔介绍Web渗透侦察工具Httrack Httrack 简介 Httrack能够克隆拷贝目标网站上的所有可访问.可 ...
- 7、解决swagger测试接口报错:TypeError: Failed to execute ‘fetch‘ on ‘Window‘: Request with GET/HEAD method cannot have body
一.Swagger报错: 1.报错类型: TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method ...
- 低代码开发平台YonBuilder移动开发,开发阅读APP教程
设计实现效果如下图: 主要包括书架,阅读,收藏功能. 经过分析,我们可以先实现底部导航功能,和书架列表页面. 1. 使用 tabLayout 高级窗口实现底部导航 . 使用tabLayout 有两 ...
- Sql Server中order by对varchar类型排序结果不对
1.问题描述 我写一个sql想要把查询结果根据LineNumber升序进行排序,即1.0,1.1,1.2,...1.3.2....2.0,......10.0,......15.2,......这样子 ...
- [Leetcode] 寻找数组的中心索引
题目 代码 class Solution { public: int pivotIndex(vector<int>& nums) { int right=0; for(auto i ...
- 【力扣】剑指 Offer II 092. 翻转字符
题目 解题思路 一个很暴力的想法,在满足单调递增的前提下,使每一位分别取 1 或 0,去看看哪个结果小. 递归函数定义int dp(StringBuilder sb, int ind, int pre ...
- 二十三、图的遍历(BFS和DFS)
一.概念 图的遍历(Traversing Graph)从某一顶点出发,访问图中所有顶点,且使每一顶点仅被访问一次.与树的遍历不同的是,图的遍历需要处理两种特殊情况:一是从某一顶点出发进行遍历时,可 ...
- mysql 简单查询
查询特定列SELECT ename,birthday FROM emp; 查询所有的select*from emp; 给列起别名select ename AS 姓名, salary AS 工资 FRO ...
- MAC 安装homebrew最好的办法哦~~
Command+Shift+. 可以显示隐藏文件.文件夹,再按一次,恢复隐藏:finder下使用Command+Shift+G 可以前往任何文件夹,包括隐藏文件夹. 常用指令如下 cd ~ 进入根 ...