IT教程 ·

详解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应用程序,以下图:

详解Net Core Web Api项目与在NginX下宣布 IT教程 第1张

然后修正项目称号,以下图:

详解Net Core Web Api项目与在NginX下宣布 IT教程 第2张

然后挑选Api选项,以下图:

详解Net Core Web Api项目与在NginX下宣布 IT教程 第3张

项目建立完成,以下图:

详解Net Core Web Api项目与在NginX下宣布 IT教程 第4张

代码引见

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项目已有了开端的明白,如今我们调试一下,项目一般启动并运转,以下图:

详解Net Core Web Api项目与在NginX下宣布 IT教程 第5张

能够看到,图中的请求端口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项目与在NginX下宣布 IT教程 第6张

如上图所示,我们取得了方才注入的依靠。

宣布

Net Core Web Api建立完成了,如今我们举行项目宣布。

右键项目,挑选宣布,以下图:

详解Net Core Web Api项目与在NginX下宣布 IT教程 第7张

点击后,弹出拔取宣布目的界面,以下图:

详解Net Core Web Api项目与在NginX下宣布 IT教程 第8张

在界面中挑选文件夹,然后在挑选文件夹文本框中输入宣布途径。

然后点击高等,弹出高等设置界面,以下图:

详解Net Core Web Api项目与在NginX下宣布 IT教程 第9张

修正设置中的布置情势为【自力】,目的运转时为【win-x64】(由于我的测试机是X64的)。

然后点击保留,页面返回上一级,然后点击建立设置文件。

然后体系进入宣布界面,以下图:

详解Net Core Web Api项目与在NginX下宣布 IT教程 第10张

点击宣布按钮举行宣布,然后耐烦守候。

详解Net Core Web Api项目与在NginX下宣布 IT教程 第11张

如上图,项目宣布胜利,如今进入宣布的文件夹,会看到许多文件,我们在其中找到CorePublishForNginX.exe;然后双击运转,测试一下是不是能够接见。

详解Net Core Web Api项目与在NginX下宣布 IT教程 第12张

双击后运转效果以下图所示:

详解Net Core Web Api项目与在NginX下宣布 IT教程 第13张

WebApi项目启动胜利,如今我们接见下http://127.0.0.1:5180/weatherforecast。

详解Net Core Web Api项目与在NginX下宣布 IT教程 第14张

如上图所示,接见胜利。

PS:这里须要注重,CMD窗口不能封闭,一旦封闭,网站会住手运转,由于CMD窗口是网站的宿主历程。

NginX下宣布Net Core Web Api

如今我们运用NginX的反向代办,将客户的请求发送到NetCoreWebApi项目中。

起首进入官网下载NginX,点击nginx/windows-1.17.8,下载Windows版本的NginX,以下图所示。官网地点:

详解Net Core Web Api项目与在NginX下宣布 IT教程 第15张

下载完成后,解压缩到一个英文目次下,内容以下图所示。

详解Net Core Web Api项目与在NginX下宣布 IT教程 第16张

conf文件夹为设置,我们双击进入conf文件夹,以下图所示。

详解Net Core Web Api项目与在NginX下宣布 IT教程 第17张

在文件夹内找到设置文件nginx.conf,用记事本将其翻开,然后在这里举行响应的设置。

上文中,我们的WebApi项目监听的是5180端口,而NginX启动后默许监听的是80端口;也就是说,我们须要在NginX的设置文件中,将80端口监听到的音讯,转发到5180端口上。

翻开nginx.conf文件,修正内容以下图所示:

详解Net Core Web Api项目与在NginX下宣布 IT教程 第18张

修正完成后,返回上级目次,运转NginX.exe;这里须要注重,NginX是没有前台界面的,所以,是不是运转胜利,要去使命治理中检察,看是不是有NginX.exe的历程。

运转完NginX.exe,我们接见下http://127.0.0.1/weatherforecast,看看是不是将80端口的音讯发送到了5180端口。

详解Net Core Web Api项目与在NginX下宣布 IT教程 第19张

运转效果如上图所示,音讯胜利的被发送到了5180端口。

PS:在nginx.conf 里,解释符号为 #。

----------------------------------------------------------------------------------------------------

到此详解Net Core Web Api项目与在NginX下宣布就解说完了。

 

----------------------------------------------------------------------------------------------------

 

C#的静态工厂方法与构造函数对比

参与评论