前言

本文将介绍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,代码如下:

  1. [ApiController]
  2. [Route("[controller]")]
  3. public class WeatherForecastController : ControllerBase
  4. {
  5. private static readonly string[] Summaries = new[]
  6. {
  7. "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
  8. };
  9.  
  10. private readonly ILogger<WeatherForecastController> _logger;
  11.  
  12. public WeatherForecastController(ILogger<WeatherForecastController> logger)
  13. {
  14. _logger = logger;
  15. }
  16.  
  17. [HttpGet]
  18. public IEnumerable<WeatherForecast> Get()
  19. {
  20. var rng = new Random();
  21. return Enumerable.Range(1, 5).Select(index => new WeatherForecast
  22. {
  23. Date = DateTime.Now.AddDays(index),
  24. TemperatureC = rng.Next(-20, 55),
  25. Summary = Summaries[rng.Next(Summaries.Length)]
  26. })
  27. .ToArray();
  28. }
  29. }

如上述代码所示,首先我们看到该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代码如下:

  1. public static IHostBuilder CreateHostBuilder(string[] args)
  2. {
  3. return Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(
  4. webBuilder =>
  5. {
  6. //设置项目的启动文件
  7. webBuilder.UseStartup<Startup>();
  8. //Kestrel的默认监听端口是http5000、https5001。
  9. webBuilder.ConfigureKestrel(options =>
  10. {
  11. options.ListenAnyIP(5180);//监听本机任意ip的5180端口,相当于设置ip0.0.0.0
  12. //options.Listen(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5180));//监听指定ip的指定端口
  13. }); ;
  14. });
  15. }

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接口,如下:

  1. public interface IKiba
  2. {
  3. string GetName();
  4. }
  5. public class Kiba: IKiba
  6. {
  7. public string GetName()
  8. {
  9. return "Kiba518";
  10. }
  11. }

然后在Startup的ConfigureServices里注入这个对象;代码如下:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddControllers();
  4. services.AddTransient<IKiba,Kiba>(); //依赖注入
  5. }

然后在Controller的构造函数中,增加IKiba类型参数,代码如下:

  1. public WeatherForecastController(IKiba _kiba)
  2. {
  3. string name = _kiba.GetName();
  4. }

这样,就完成了依赖注入,我们运行代码,在构造函数里打断点,测试一下,是否可以获取到值。

如上图所示,我们得到了刚刚注入的依赖。

发布

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下发布的更多相关文章

  1. 在Docker容器中运行.Net Core web Api项目

    安装Docker环境 参考本人这篇<CentOS 7 下Docker的安装>文章进行安装以及环境配置,这里不做赘述. 通过.NetCore开发WebApi项目 1. 创建.Net Core ...

  2. 新建 ASP.NET Core Web API 项目 -- RESTFul 风格 Hello World!

    一.创建一个空项目 请查看 新建 .NET Core 项目 -- Hello World! 一节,新建一个项目:    二.添加引用并修改配置为 Web API (.NET Core 已将 MVC/W ...

  3. 详解:基于WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器功能

    文件同步传输工具比较多,传输的方式也比较多,比如:FTP.共享.HTTP等,我这里要讲的就是基于HTTP协议的WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器这样的一个工具(简称:一 ...

  4. 在.net core web api项目中安装swagger展示api接口(相当于生成api文档)

    1,  建立或打开项目后,在“程序包管理器控制台”中执行以下命令添加包引用: Install-Package Swashbuckle.AspNetCore 2,在项目中打开Startup.cs文件,找 ...

  5. 在ASP.NET Core Web API 项目里无法访问(wwwroot)下的文件

    解决办法:在“ Startup.cs ” 文件里的 Configur方法里添加一句代码“ app.UseStaticFiles() ”,这样就可以访问wwwroot下的文件了. - 方法代码是: - ...

  6. Linux下基于Docker部署.Net Core web api项目

    Docker的好处我就不说啦,问问度娘就知道了

  7. 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 重点: 实现多级子目录的压缩, ...

  8. 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& ...

  9. 国产中标麒麟Linux部署dotnet core 环境并运行项目 (三) 部署运行WEB API项目

    部署dotnet Core Web API 上一步的文章,是我们公司最核心的一个ORM组件,在中标麒麟系统完成了一个插入数据的任务,这一步是将正式的从dot net framework 迁移到 dot ...

随机推荐

  1. Render函数详解

    一.虚拟dom DOM是文档对象模型(Document Object Model)的简写,在浏览器中通过js来操作DOM的操作性能很差,于是虚拟Dom应运而生.虚拟Dom就是在js中模拟DOM对象树来 ...

  2. 使用ABAP Data Validator验证数据有效性

    在日常的开发过程中,我们常常要处理不同来源的数据.数据可能来自不可靠的外部系统.不可靠的用户输入和甚至设计有误的数据库表,因此,对数据有效性进行验证是必要的工作. 开源工具ABAP Data Vali ...

  3. CodeSign error: no provisioning profile at path '/Users/zhht-2015/Library/MobileDevice/Provisioning Profiles/79693141-f98b-4ac4-8bb4-476c9475f265.mobileprovision'

    解决方法: 1.关闭Xcode,找到项目中的**.xcodeproj文件,点击右键,show package contents(打开包内容). 2.打开后找到project.pbxproj文件,用文本 ...

  4. 十大排序算法(Java实现)

    一.冒泡排序(Bubble Sort) public class BubbleSort { public static void main(String[] args) { int[] arr = { ...

  5. FileZilla 报错“the server's certificate is unknown”

    FileZilla 是非常好用的一款FTP SFTP 管理工具. 但是filezilla会报错“the server's certificate is unknown” 并且会在window中看到以下 ...

  6. robotframework,移动端(小程序)自动化,获取元素属性值的方法

    如下图,获取商品价格 属性值显示在content-desc内 传统的get text指定是无法获得到这个元素指定属性的值的 只有通过使用AppiumLibrary.get element attrib ...

  7. Day6-Python3基础-面向对象编程

    面向过程 VS 面向对象 编程范式 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大 ...

  8. Referer防盗链

    一.目录展示 分为AProject和BProject两个项目进行测试 二.修改c:\windows\system32\drivers\etc下的hosts文件 三.aindex.jsp 四.binde ...

  9. hadoop3.2.0集群搭建的一些坑!

    搭建步骤就不多说了,网上教程很多,这里列举几个: https://blog.csdn.net/pucao_cug/article/details/71698903   2.8版本 https://ww ...

  10. 读《Clean Code 代码整洁之道》之感悟

    盲目自信,自认为已经敲了几年代码,还看什么整洁之道啊.我那可爱的书架读懂了我的心思,很明事理的保护起来这本小可爱,未曾让它与我牵手 最近项目中的 bug 有点多,改动代码十分吃力,每看一行代码都带一句 ...