.Net Core 3.1瀏覽器後端服務(一) Web API專案搭建

鹹魚翻身?發表於2021-02-03

一、前言

基於CefSharp開發的瀏覽器專案已有一段時間,考慮到後期資料維護需要Server端來管理,故開啟新篇章搭建瀏覽器後端服務。該專案前期以梳理服務端知識為主,後期將配合CefSharp瀏覽器專案一起使用。

關於服務端技術選型,考慮到近期剛好有專案需求,並且本人也想學習下Web API相關知識。故採用.Net Web API技術搭建後端服務專案。

二、 Web API簡介

ASP.NET Web API是一個框架,可以輕鬆構建HTTP服務,覆蓋廣泛的客戶端,包括PC和移動裝置。

三、Web API專案搭建

 開啟VS 建立新專案選擇【ASP.NET Core Web 應用程式】點選 【下一步】

填寫Project name及Location,點選【Create】

為了更好了解Web API專案,這裡選擇空專案,一步步搭建,關於Https及docker後期需要時在配置,暫時不勾選,點選【Create】

建立完成後F5 執行 我們熟悉的Hello World出現了。

三、專案結構分析

建立完成後解決方案生成如下,紅框處為專案所需依賴,綠框為專案配置檔案,橘黃框為專案啟動入口及啟動設定,專案依賴可通過NuGet引用。

1、launchSettings.json

launchSettings.json 用於專案的執行準備工作。引數如下

紅框中的啟動方式對應VS的選擇的啟動方式,IIS ExPress以IIS方式啟動,Project 以 Kestrel方式啟動

我們也可以增加啟動方式配置

2、appsettings.json

appsettings.json 用於專案執行時所需的配置,比如資料庫配置、Redis配置、日誌配置、路徑配置、其他配置等。

在實際開發中環境一般分為開發環境、測試環境、生產環境。

而專案預設建立兩個配置檔案:appsettings.json (公用配置檔案)、appsettings.Development.json (開發環境配置檔案)

如需配置生成環境可自行建立生產環境配置檔案 appsettings.Production.json

並改變launchSettings.json中ASPNETCORE_ENVIRONMENT的value為Production

 3、Program

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

在Program中看到了熟悉的Main方法,找到了程式的入口,Main方法中執行了 CreateHostBuilder(args).Build().Run(),建立、配置IHostBuilder並執行

CreateHostBuilder很複雜,感興趣的可反編譯原始碼分析,功力有限這裡不做深入解析。

4、Startup

public void ConfigureServices(IServiceCollection services)
{
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGet("/", async context =>
        {
            await context.Response.WriteAsync("Hello World!");
        });
    });
}

Startup中提供了兩個方法 ConfigureServices和Configure

ConfigureServices用於服務注入,如資料庫服務,快取服務等可在這裡進行注入

Configure用於指定ASP.NET應用程式如何響應HTTP請求,這裡通過配置中介軟體來完成請求處理,如可配置IP記錄、靜態資源處理等中介軟體等。

四、建立第一個介面

Configure方法中 UseEndpoints 返回的是“Hello World!”,那如何建立想要的介面呢?

起初建立的是空專案,再建立個api專案做下對比(建立過程和空專案類似,只是選擇API,此處略過),對比如下:

API專案中多了Controllers資料夾及WeatherForecas實體類

再看Startup類的對比:

API專案ConfigureServices 方法中 將控制器的服務注入IServiceCollection

API專案Configure 方法中 將控制器操作的終結點新增到.net 的路由

由上對比可知,我們需要更改空專案,新增控制器的服務注入並將控制器操作的終結點新增到.net 路由,程式碼如下:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

接著建立Controllers資料夾,並新增一個控制器為HomeController如下:

[ApiController]
[Route("[controller]")]
public class HomeController : Controller
{
    [HttpGet]
    public string Get()
    {
        return "Home";
    }
}

F5執行

執行後發現404,這是由於路由對映問題,瀏覽器輸入http://localhost:52233/Home

 執行正常,如何讓程式啟動後直接對映到Home控制器?這時用到前文提到的launchSettings.json檔案,新增鍵值配置  "launchUrl": "Home",

重新啟動,預設訪問HomeController,好了,第一個介面建立成功。

五、結語

本章節建立了一個預設WebAPI專案,對專案中結構做了簡單表述,並建立了第一個介面。剛開始接觸Web服務類專案,若有不對之處,請各位道友指正!

 

相關文章