日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

《ASP.NET Core 微服务实战》-- 读书笔记(第7章)

發(fā)布時(shí)間:2023/12/4 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《ASP.NET Core 微服务实战》-- 读书笔记(第7章) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第 7 章 開發(fā) ASP.NET Core Web 應(yīng)用

ASP.NET Core 基礎(chǔ)

在本章,我們將從一個(gè)命令行應(yīng)用開始,并且在不借助任何模板,腳手架和向?qū)У那闆r下,最終得到一個(gè)功能完整的 Web 應(yīng)用

GitHub鏈接:https://github.com/microservices-aspnetcore/hello-world

運(yùn)行 dotnet new console 命令之后,我們首先得到一個(gè) Program.cs 文件,修改該文件并添加配置支持

using System; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration;namespace StatlerWaldorfCorp.HelloWorld {public class Program{public static void Main(string[] args){var config = new ConfigurationBuilder().AddCommandLine(args).Build();var host = new WebHostBuilder().UseKestrel().UseStartup<Startup>().UseConfiguration(config).Build();host.Run();}} }

之后添加一個(gè) Startup 類,用于配置默認(rèn)的中間件,它對所有 HTTP 請求都返回 "Hello World" 響應(yīng)

using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Logging; using Microsoft.AspNetCore.Http;namespace StatlerWaldorfCorp.HelloWorld {public class Startup{public Startup(IHostingEnvironment env){}public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){app.Run(async (context) =>{await context.Response.WriteAsync("Hello, world!\n");});}} }

添加 NuGet 包作為項(xiàng)目的依賴,并直接在項(xiàng)目文件開頭處聲明要使用的 Web SDK

<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>netcoreapp1.1</TargetFramework></PropertyGroup><ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.1" /><PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="1.1.1"/><PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.1"/><PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.1"/><PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1"/><PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="1.1.1"/></ItemGroup></Project>

添加 ASP.NET MVC 中間件

GitHub鏈接:https://github.com/microservices-aspnetcore/webapp

using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Configuration;namespace StatlerWaldorfCorp.WebApp {public class Startup{public Startup(IHostingEnvironment env){}public IConfiguration Configuration { get; set; }public void ConfigureServices(IServiceCollection services) {services.AddMvc();}public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){app.UseMvc(routes =>{routes.MapRoute("default",template: "{controller=Home}/{action=Index}/{id?}");});}} }

為了讓它生效,我們還需要添加 NuGet 包依賴:Microsoft.AspNetCore.Mvc

添加控制器

控制器專門負(fù)責(zé):

  • (1)接收來自 HTTP 請求的輸入

  • (2)將輸入轉(zhuǎn)交給與 HTTP 通信、JSON解析無關(guān)的服務(wù)類處理

  • (3)返回合適的響應(yīng)代碼及正文

using Microsoft.AspNetCore.Mvc; namespace StatlerWaldorfCorp.WebApp.Controllers {public class HomeController : Controller{public IActionResult Index(){return "Hello World";}} }

只要向文件中加入上面的內(nèi)容,此前創(chuàng)建的路由就能自動(dòng)檢測到這個(gè)控制器并讓它生效

添加模型

我們創(chuàng)建了一個(gè)用于表示股票報(bào)價(jià)的簡單模型

namespace StatlerWaldorfCorp.WebApp.Models {public class StockQuote{public string Symbol { get; set; }public int Price { get; set; }} }

添加視圖

<html> <head><title>Hello world</title> </head> <body><h1>Hello World</h1><div><h2>Stock Quote</h2><div>Symbol: @Model.Symbol<br/>Price: $@Model.Price<br/></div></div> </body> </html>

現(xiàn)在,我們可用修改 HomeController,不再返回示例文本,而是呈現(xiàn)視圖

using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; using StatlerWaldorfCorp.WebApp.Models;namespace StatlerWaldorfCorp.WebApp.Controllers {public class HomeController : Controller{public IActionResult Index(){var model = new StockQuote { Symbol = "HLLO", Price = 3200 };return View(model);}} }

如果現(xiàn)在運(yùn)行應(yīng)用,很可能會(huì)收到 HTTP 500 響應(yīng)

由于我們開發(fā)的是 Web 應(yīng)用,因而一定希望能查看所有發(fā)生錯(cuò)誤的堆棧信息

可用向 Startup 類的 Configure 方法中加入一行調(diào)用 UseDeveloperExceptionPage 的代碼,實(shí)現(xiàn)這一需求

using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration;namespace StatlerWaldorfCorp.WebApp {public class Startup{public Startup(IHostingEnvironment env){var builder = new ConfigurationBuilder().SetBasePath(env.ContentRootPath).AddEnvironmentVariables();Configuration = builder.Build();}public IConfiguration Configuration { get; set; }public void ConfigureServices(IServiceCollection services) {services.AddMvc();}public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){loggerFactory.AddConsole();loggerFactory.AddDebug();app.UseDeveloperExceptionPage();app.UseMvc(routes =>{routes.MapRoute("default",template: "{controller=Home}/{action=Index}/{id?}");});app.UseStaticFiles();}} }

有了新的 Startup 類,我們應(yīng)該能夠通過 dotnet restore 以及 dotnet run 啟動(dòng)應(yīng)用

從 JavaScript 中調(diào)用 REST API

首先,我們通過添加新的控制器來創(chuàng)建 API 端點(diǎn)

using Microsoft.AspNetCore.Mvc; using StatlerWaldorfCorp.WebApp.Models;namespace StatlerWaldorfCorp.WebApp.Controllers {[Route("api/test")]public class ApiController : Controller{[HttpGet]public IActionResult GetTest(){return this.Ok(new StockQuote { Symbol = "API", Price = 9999 });}} }

如果現(xiàn)在再運(yùn)行應(yīng)用,可用打開瀏覽器并訪問 http://localhost:5000/api/test,應(yīng)該能看到一個(gè) JSON 響應(yīng)

{"symbol" : "API","price" : 9999 }

有了可供消費(fèi)的 API 后,現(xiàn)在來修改我們唯一的視圖,讓它調(diào)用 JavaScript 來消費(fèi)這個(gè) API

<html> <head><title>Hello world</title><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script><script src="/Scripts/hello.js"></script> </head> <body><h1>Hello World</h1><div><h2>Stock Quote</h2><div>Symbol: @Model.Symbol<br/>Price: $@Model.Price<br/></div></div><br/><div><p class="quote-symbol">The Symbol is </p><p class="quote-price">The price is $</p></div> </body> </html>

注意,這里決定引入一個(gè) jQuery,以及一個(gè)新腳本 hello.js

我們按照約定,把它添加到名為 wwwroot 的新目錄 wwwroot/Scripts/hello.js

$(document).ready(function () {$.ajax({url: "/api/test"}).then(function (data) {$('.quote-symbol').append(data.symbol);$('.quote-price').append(data.price);}); });

這些 jQuery 代碼非常直觀,它們向 API 端點(diǎn)發(fā)送 Ajax 請求,返回的對象會(huì)包含 symbol 和 price 屬性,它們將被附加到新添加的段落標(biāo)簽之中

開發(fā)云原生 Web 應(yīng)用

  • (1)API 優(yōu)先

  • (2)配置

  • (3)日志

  • (4)會(huì)話狀態(tài)

  • (5)數(shù)據(jù)保護(hù)

  • (6)后端服務(wù)

  • (7)環(huán)境均等

  • (8)端口綁定

  • (9)遙測

  • (10)身份驗(yàn)證和授權(quán)

會(huì)話狀態(tài)

云原生 Web 應(yīng)用基本上不可能再使用基于內(nèi)存的會(huì)話狀態(tài)了,而必須使用進(jìn)程外的提供程序

數(shù)據(jù)保戶

如果涉及數(shù)據(jù)保護(hù),”進(jìn)程外存儲(chǔ)“的思路同樣適用于密鑰存儲(chǔ)

我們要使用一種現(xiàn)成的密鑰保管庫,可以是基于云的密鑰保管庫,也可以是基于 Redis 或其他數(shù)據(jù)庫制作的定制解決方案

端口綁定

不管是使用 docker compose,部署到 Kubernetes,還是使用 AWS、Azure 或者 GCP,應(yīng)用要想在云環(huán)境中運(yùn)行良好,就要能接受為它預(yù)設(shè)的任何端口號

總結(jié)

以上是生活随笔為你收集整理的《ASP.NET Core 微服务实战》-- 读书笔记(第7章)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。