详解Net Core Web Api项目与在NginX下宣布
Java源码系列1——ArrayList
媒介
本文将引见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,以下图所示。官网地点:
下载完成后,解压缩到一个英文目次下,内容以下图所示。
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 里,解释符号为 #。
----------------------------------------------------------------------------------------------------
到此详解Net Core Web Api项目与在NginX下宣布就解说完了。
----------------------------------------------------------------------------------------------------
C#的静态工厂方法与构造函数对比