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

歡迎訪問(wèn) 默认站点!

默认站点

當(dāng)前位置: 首頁(yè) >

把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析

發(fā)布時(shí)間:2023/12/4 30 豆豆
默认站点 收集整理的這篇文章主要介紹了 把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

因?yàn)樽约旱介_(kāi)發(fā)電腦轉(zhuǎn)到Mac Air,之前的Webform/MVC應(yīng)用在Mac 跑不起來(lái),而且.Net Core 2.0 已經(jīng)比較穩(wěn)定了。

1. 為什么會(huì)有跨平臺(tái)的.Net Core?

近年來(lái),我們已經(jīng)進(jìn)入云計(jì)算時(shí)代,在云平臺(tái)的PaSS和SaSS上也是發(fā)生了大幅度的進(jìn)化,以docker為代表。微軟的Azure平臺(tái),google的GAE等等各大云計(jì)算廠商都提供了PaSS平臺(tái),我們的應(yīng)用程序要遷移到這樣的平臺(tái)上都需要進(jìn)行重寫(xiě)。Docker,給云計(jì)算帶來(lái)一場(chǎng)革新,Docker可以被認(rèn)為是互聯(lián)網(wǎng)的集裝箱,可以靈活地封裝軟件,令其更快速地傳播。這對(duì)現(xiàn)代互聯(lián)網(wǎng)來(lái)說(shuō)是一件大事,因?yàn)檐浖紩?huì)運(yùn)行上成百上千的機(jī)器上。Docker可以改變我們開(kāi)發(fā)軟件的方式,令每個(gè)人都能便捷地利用大量的運(yùn)算能力。Docker可以讓開(kāi)發(fā)者專注于開(kāi)發(fā)軟件,不需要考慮在哪里運(yùn)行自己的軟件,這才是云計(jì)算的發(fā)展方向。開(kāi)發(fā)者考慮應(yīng)用本身就足夠了。

以往的.NET 很難進(jìn)入以docker為代表的云計(jì)算開(kāi)發(fā)平臺(tái),特別是Windows不支持Docker,因?yàn)槟峭耆腔ヂ?lián)網(wǎng)服務(wù)的基石--Linux系統(tǒng)才有的技術(shù),微軟為了適應(yīng)這樣的云計(jì)算潮流,在Windows Server 2016/Windows 10上支持了docker,也重新開(kāi)發(fā)跨平臺(tái).NET Core的應(yīng)用運(yùn)行平臺(tái)。

2. 對(duì)Old .Neter, 如何盡快熟悉.Net Core 呢?

我們?cè)趘s.net 新建一個(gè)Empty Core solution, 看看程序入口program.cs,它還是一個(gè)console程序. 多引入了4個(gè)命名空間. ASP.NET Core應(yīng)用的寄宿依賴于一個(gè)WebHost對(duì)象,通過(guò)對(duì)應(yīng)的CreateDefaultBuilder的工廠方法創(chuàng)建啟動(dòng)一個(gè)WebHost, web服務(wù)器. 注冊(cè)調(diào)用了StartUp類. 這個(gè)類里面會(huì)注冊(cè)一些中間件.

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Threading.Tasks;

using Microsoft.AspNetCore;

using Microsoft.AspNetCore.Hosting;

using Microsoft.Extensions.Configuration;

using Microsoft.Extensions.Logging;


namespace sso

{

? ? public class Program

? ? {

? ? ? ? public static void Main(string[] args)

? ? ? ? {

? ? ? ? ? ? BuildWebHost(args).Run();

? ? ? ? }


? ? ? ? public static IWebHost BuildWebHost(string[] args) =>

? ? ? ? ? ? WebHost.CreateDefaultBuilder(args)

? ? ? ? ? ? ? ? .UseStartup<Startup>()

? ? ? ? ? ? ? ? .Build();

? ? }

}

startup類里有configureServices和configure方法,?調(diào)用順序是先ConfigureServices后Configure。

這2個(gè)的區(qū)別是:?其中和Dependecy Injection有關(guān)的方法是放在ConfigureServices()中,

Configure()是和Middleware相關(guān)的方法

public class Startup

? ? {

? ? ? ? // This method gets called by the runtime. Use this method to add services to the container.

? ? ? ? // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940

? ? ? ? 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, IHostingEnvironment env)

? ? ? ? {

? ? ? ? ? ? if (env.IsDevelopment())

? ? ? ? ? ? {

? ? ? ? ? ? ? ? app.UseDeveloperExceptionPage();

? ? ? ? ? ? }


? ? ? ? ? ? app.Run(async (context) =>

? ? ? ? ? ? {

? ? ? ? ? ? ? ? await context.Response.WriteAsync("Hello World!");

? ? ? ? ? ? });

? ? ? ? }

? ? }

默認(rèn)Empty的solution是只有一個(gè)Hello World,我們看一下典型的數(shù)據(jù)庫(kù)應(yīng)用,這個(gè)文件會(huì)是怎么樣的,引入EF,MVC等中間件

public void ConfigureServices(IServiceCollection services)

{

? ? // Add framework services.

? ? services.AddDbContext<ApplicationDbContext>(options =>

? ? ? ? options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));


? ? services.AddIdentity<ApplicationUser, IdentityRole>()

? ? ? ? .AddEntityFrameworkStores<ApplicationDbContext>()

? ? ? ? .AddDefaultTokenProviders();


? ? services.AddMvc();


? ? // Add application services.

? ? services.AddTransient<IEmailSender, AuthMessageSender>();

? ? services.AddTransient<ISmsSender, AuthMessageSender>();

}


public void Configure(IApplicationBuilder app, IHostingEnvironment env)

{

? ? if (env.IsDevelopment())

? ? {

? ? ? ? app.UseDeveloperExceptionPage();

? ? ? ? app.UseBrowserLink();

? ? }

? ? else

? ? {

? ? ? ? app.UseExceptionHandler("/Error");

? ? }


? ? app.UseStaticFiles();


? ? app.UseMvc(routes =>

? ? {

? ? ? ? routes.MapRoute(

? ? ? ? ? ? name: "default",

? ? ? ? ? ? template: "{controller}/{action=Index}/{id?}");

? ? });

}

如果要引入其他中間件,比如這個(gè),可以參考下面文章.

ASP.NET Core 中間件之壓縮、緩存
asp.net core 2.0 查缺補(bǔ)漏
中間件配置主要是用Run、Map和Use方法進(jìn)行配置,請(qǐng)參考這個(gè)文章??ASP.NET Core 運(yùn)行原理剖析

?犯了一個(gè)錯(cuò)誤,在?https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?tabs=aspnetcore2x? 這里有提到

Don't call?next.Invoke?after the response has been sent to the client. Changes to?HttpResponse?after the response has started will throw an exception.

錯(cuò)誤代碼如下: 這個(gè)代碼運(yùn)行時(shí)會(huì)出錯(cuò),錯(cuò)誤是

該網(wǎng)頁(yè)無(wú)法正常運(yùn)作

localhost?意外終止了連接。

ERR_INCOMPLETE_CHUNKED_ENCODING


原文地址 http://www.cnblogs.com/zitjubiz/p/net_core_daily_1.html


.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com


總結(jié)

以上是默认站点為你收集整理的把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得默认站点網(wǎng)站內(nèi)容還不錯(cuò),歡迎將默认站点推薦給好友。