详解Net Core Web Api项目与在NginX下发布
前言
本文将介绍Net Core的一些基础知识和如何NginX下发布Net Core的WebApi项目。
测试环境
操作系统:windows 10
开发工具:visual studio 2019
框架:Net Core 3
Net Core Web Api项目创建
首先创建一个Net Core Web Api项目——CorePublishForNginX。
首先选择Asp.Net Core Web应用程序,如下图:
然后修改项目名称,如下图:
然后选择Api选项,如下图:
项目创建完成,如下图:
代码介绍
Controller
项目创建完成后,我们可以看到,里面内置了一个Api Controller——WeatherForecastController,代码如下:
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
}; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
} [HttpGet]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
}
如上述代码所示,首先我们看到该Controller继承的类是ControllerBase。(在NetFramework里继承的WebApi继承的是ApiController,Mvc继承的是Controller)
然后,我们发现Controller有一个构造函数,并且还有一个入参;我们知道Controller的调用是框架的内部机制,也就是说,框架在调用Controller时会给他一个入参。
通过名称我们可以发现,这个是一个日志入参,即,Core调用Controller时,为我们内置了一个日志记录对象。
这里我们不需要使用日志,所以可以先把这个构造函数删除。
接下来,我们看到了Api请求实现的主体,Get请求。
主体现的很简单,就是方法名用Get,然后方法头上加HttpGet特性。(Get方法名是可以修改的,因为一个WebApi里只支持一个Get请求,所以只要方法加了HttpGet特性,就会被视为默认的Get方法)
Get请求里实现了一个实体集合的组件,即请求该Controller会得到一个实体集合的数组。
Program
学习完Controller,我们进入Program.cs文件,我们做下简单的修改,设置一下Kestrel的启动端口。
修改CreateHostBuilder代码如下:
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(
webBuilder =>
{
//设置项目的启动文件
webBuilder.UseStartup<Startup>();
//Kestrel的默认监听端口是http5000、https5001。
webBuilder.ConfigureKestrel(options =>
{
options.ListenAnyIP(5180);//监听本机任意ip的5180端口,相当于设置ip0.0.0.0
//options.Listen(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5180));//监听指定ip的指定端口
}); ;
});
}
Startup
Startup的调用顺序如下:
Startup构造函数——ConfigureServices配置服务函数——Configure请求配置
Startup构造函数:
这里做了简单配置信息对象提取,实战中,像启动日志这样的操作也可以集中放在这里。
ConfigureServices配置服务函数:
这里只添加了一个控制器服务,实战中,还可以添加更多服务,比如使用services.AddCors添加跨域服务。
Configure请求配置:
这里做了一些请求配置,如:
app.UseDeveloperExceptionPage()——设置请求异常时的显示内容为内置异常错误界面(在Mvc模式下,还可以指定请求异常时的显示界面,如:app.UseExceptionHandler("/Home/Error");)
app.UseHttpsRedirection()——Https请求重定向,将Http请求转换成Https,增加一些安全性。(还可以追加app.UseHsts(),要求浏览器只发送https,实现安全双保险)
app.UseRouting()——配置endpointRouteBuilder。
app.UseEndpoints——使用endpointRouteBuilder。UseRouting与UseEndpoints组合实现路由。
app.UseAuthorization()——请求的授权处理,因为没有没有添加授权服务services.AddAuthorization,所以这里它是无效的。
----------------------------------------------------------------------------------------------------
到此,我们对Net Core Web Api项目已经有了初步的理解,现在我们调试一下,项目正常启动并运行,如下图:
可以看到,图中的请求端口44317,并不是我们设置的5180,这因为,调试时使用的是快速IIS来启动项目,等到发布后,就自然使用5180端口了。
依赖注入
这里简单介绍一下NetCore提供的依赖注入。
上文中提到的,框架调用Controller时,提供了一个入参—ILogger对象,这种行为就是依赖注入。
而这种为Controller提供的入参行为,在NetCore中是可以自定义增加;现在我们简单的增加一个对象。
首先创建一个Kiba类和一个IKiba接口,如下:
public interface IKiba
{
string GetName();
}
public class Kiba: IKiba
{
public string GetName()
{
return "Kiba518";
}
}
然后在Startup的ConfigureServices里注入这个对象;代码如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddTransient<IKiba,Kiba>(); //依赖注入
}
然后在Controller的构造函数中,增加IKiba类型参数,代码如下:
public WeatherForecastController(IKiba _kiba)
{
string name = _kiba.GetName();
}
这样,就完成了依赖注入,我们运行代码,在构造函数里打断点,测试一下,是否可以获取到值。
如上图所示,我们得到了刚刚注入的依赖。
发布
Net Core Web Api创建完成了,现在我们进行项目发布。
右键项目,选择发布,如下图:
点击后,弹出选取发布目标界面,如下图:
在界面中选择文件夹,然后在选择文件夹文本框中输入发布路径。
然后点击高级,弹出高级配置界面,如下图:
修改配置中的部署模式为【独立】,目标运行时为【win-x64】(因为我的测试机是X64的)。
然后点击保存,页面返回上一级,然后点击创建配置文件。
然后系统进入发布界面,如下图:
点击发布按钮进行发布,然后耐心等待。
如上图,项目发布成功,现在进入发布的文件夹,会看到很多文件,我们在其中找到CorePublishForNginX.exe;然后双击运行,测试一下是否可以访问。
双击后运行结果如下图所示:
WebApi项目启动成功,现在我们访问下http://127.0.0.1:5180/weatherforecast。
如上图所示,访问成功。
PS:这里需要注意,CMD窗口不能关闭,一旦关闭,网站会停止运行,因为CMD窗口是网站的宿主进程。
NginX下发布Net Core Web Api
现在我们使用NginX的反向代理,将客户的请求发送到NetCoreWebApi项目中。
首先进入官网下载NginX,点击nginx/windows-1.17.8,下载Windows版本的NginX,如下图所示。官网地址:http://nginx.org/en/download.html
下载完成后,解压缩到一个英文目录下,内容如下图所示。
conf文件夹为配置,我们双击进入conf文件夹,如下图所示。
在文件夹内找到配置文件nginx.conf,用记事本将其打开,然后在这里进行相应的配置。
上文中,我们的WebApi项目监听的是5180端口,而NginX启动后默认监听的是80端口;也就是说,我们需要在NginX的配置文件中,将80端口监听到的消息,转发到5180端口上。
打开nginx.conf文件,修改内容如下图所示:
修改完成后,返回上级目录,运行NginX.exe;这里需要注意,NginX是没有前台界面的,所以,是否运行成功,要去任务管理中查看,看是否有NginX.exe的进程。
运行完NginX.exe,我们访问下http://127.0.0.1/weatherforecast,看看是否将80端口的消息发送到了5180端口。
运行结果如上图所示,消息成功的被发送到了5180端口。
PS:在nginx.conf 里,注释符号为 #。location后面有个斜杠“/”,斜杠代表根目录,想指向子目录,只需在斜杠后加目录名,如/admin。
----------------------------------------------------------------------------------------------------
到此详解Net Core Web Api项目与在NginX下发布就讲解完了。
代码已经传到Github上了,欢迎大家下载。
Github地址:https://github.com/kiba518/CorePublishForNginX
----------------------------------------------------------------------------------------------------
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!
https://www.cnblogs.com/kiba/p/12286225.html
详解Net Core Web Api项目与在NginX下发布的更多相关文章
- 在Docker容器中运行.Net Core web Api项目
安装Docker环境 参考本人这篇<CentOS 7 下Docker的安装>文章进行安装以及环境配置,这里不做赘述. 通过.NetCore开发WebApi项目 1. 创建.Net Core ...
- 新建 ASP.NET Core Web API 项目 -- RESTFul 风格 Hello World!
一.创建一个空项目 请查看 新建 .NET Core 项目 -- Hello World! 一节,新建一个项目: 二.添加引用并修改配置为 Web API (.NET Core 已将 MVC/W ...
- 详解:基于WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器功能
文件同步传输工具比较多,传输的方式也比较多,比如:FTP.共享.HTTP等,我这里要讲的就是基于HTTP协议的WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器这样的一个工具(简称:一 ...
- 在.net core web api项目中安装swagger展示api接口(相当于生成api文档)
1, 建立或打开项目后,在“程序包管理器控制台”中执行以下命令添加包引用: Install-Package Swashbuckle.AspNetCore 2,在项目中打开Startup.cs文件,找 ...
- 在ASP.NET Core Web API 项目里无法访问(wwwroot)下的文件
解决办法:在“ Startup.cs ” 文件里的 Configur方法里添加一句代码“ app.UseStaticFiles() ”,这样就可以访问wwwroot下的文件了. - 方法代码是: - ...
- Linux下基于Docker部署.Net Core web api项目
Docker的好处我就不说啦,问问度娘就知道了
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...
- List多个字段标识过滤 IIS发布.net core mvc web站点 ASP.NET Core 实战:构建带有版本控制的 API 接口 ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目 Using AutoFac
List多个字段标识过滤 class Program{ public static void Main(string[] args) { List<T> list = new List& ...
- 国产中标麒麟Linux部署dotnet core 环境并运行项目 (三) 部署运行WEB API项目
部署dotnet Core Web API 上一步的文章,是我们公司最核心的一个ORM组件,在中标麒麟系统完成了一个插入数据的任务,这一步是将正式的从dot net framework 迁移到 dot ...
随机推荐
- 2次方的期望dp
某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a个com ...
- 多个github账号时,本地配置ssh-key
由于需要,申请了多个github账号,但是都是在同一台电脑上操作,原来只有一个账号进行ssh操作时,推送没有遇到什么问题,现在有多个账号了,推送的时候就有点懵逼了,下面是根据网上的资料来进行多个账号, ...
- [bzoj4872] [洛谷P3750] [六省联考2017] 分手是祝愿
Description Zeit und Raum trennen dich und mich. 时空将你我分开. \(B\) 君在玩一个游戏,这个游戏由 \(n\) 个灯和 \(n\) 个开关组成, ...
- python3操作PyMySQL笔记
python3操作mysql需要先安装PyMySQL pip install PyMySQL 在linux登录mysql ,并且在安装数据库时设置了数据库的用户名“root”和密码“root”,mys ...
- dotnet restore 初次运行 这个 指令 会安装 特别多的 4.0.0 或者 4.1 的 rc2-24027的 东东 这些东西。
- 隐隐约约 听 RazorEngine 在 那里 据说 生成代码 很 美。
这只是 一个开始 ....
- ip 地址库 这个 准么 呢
- .net core 常见设计模式-IChangeToken
场景 一个对象A,希望它的某些状态在发生改变时通知到B(或C.D),常见的做法是在A中定义一个事件(或直接用委托),当状态改变时A去触发这个事件.而B直接订阅这个事件 这种设计有点问题B由于要订阅A的 ...
- (ES6)JavaScript中面向对象类的实现
在ES5中,我们就知道JS是不支持面向对象的,所以用函数模拟了一个构造函数来实现类的.那么在ES6中,在ES5的原理基础上,将代码书写更为简单,明了. 一.怎样用ES6创建类?首先看一看例子: cla ...
- android开发实战-记账本APP(一)
记账本开发流程: 对于一个记账本的初步开发而言,我实现的功能有: ①实现一个记账本的页面 ②可以添加数据并更新到页面中 ③可以将数据信息以图表的形式展现 (一)首先,制作一个记账本的页面. ①在系统自 ...