欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
ASP.NET Core 運行原理剖析

在A(yíng)SP.NET Core之前,ASP.NET Framework應用程序由IIS加載。Web應用程序的入口點(diǎn)由InetMgr.exe創(chuàng )建并調用托管。以初始化過(guò)程中觸發(fā)HttpApplication.Application_Start()事件。開(kāi)發(fā)人員第一次執行代碼的機會(huì )是處理Application_StartGlobal.asax中的事件。在A(yíng)SP.NET Core中,Global.asax文件不再可用,已被新的初始化過(guò)程替代。

ASP.NET Core 應用程序是在.NET Core 控制臺程序下調用特定的庫,這是ASP.NET Core應用程序開(kāi)發(fā)的根本變化。所有的ASP.NET托管庫都是從Program開(kāi)始執行,而不是由IIS托管。也就是說(shuō).NET工具鏈可以同時(shí)用于.NET Core控制臺應用程序和ASP.NET Core應用程序。

  1. using System;
    using Microsoft.AspNetCore.Hosting;

    namespace aspnetcoreapp{  

     public class Program
  2.    {      
      public static void Main(string[] args)        {            
  3.            var host = new WebHostBuilder()
  4.                .UseKestrel() //指定宿主程序為Kestrel
  5.                .UseStartup<Startup>()// 調用Startup.cs類(lèi)下的Configure 和 ConfigureServices
  6.                .Build();
  7.            host.Run();
  8.        }
  9.    }
  10. }

以上是Program類(lèi)中Main方法的示例代碼,Main方法負責初始化Web主機,調用Startup和執行應用程序。主機將調用Startup類(lèi)下面的ConfigureConfigureServices方法。

1.2. 文件配置

1.2.1. Starup文件配置

對于一個(gè)ASP.NET Core 程序而言,Startup 類(lèi)是必須的。ASP.NET Core在程序啟動(dòng)時(shí)會(huì )從Program類(lèi)中開(kāi)始執行,然后再找到UseStartup<Startup>中找到配置的Startup的類(lèi),如果不指定Startup類(lèi)會(huì )導致啟動(dòng)失敗。

Startup中必須定義Configure方法,而ConfigureServices方法則是可選的,方法會(huì )在程序第一次啟動(dòng)時(shí)被調用,類(lèi)似傳統的ASP.NET MVC的路由和應用程序狀態(tài)均可在Startup中配置,也可以在此初始化所需中間件。

Configure

在A(yíng)SP.NET Core 應用程序中Configure方法用于指定中間件以什么樣的形式響應HTTP請求。

  1. using System;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Http;

    namespace aspnetcoreapp{  

     public class Startup
  2.    {      
     
      public Startup(IConfiguration configuration)    
       {
  3.            Configuration = configuration;
  4.        }    
      
         public IConfiguration Configuration { get; }        
  5.    
            public void Configure(IApplicationBuilder app, IHostingEnvironment env)        {                        
  6.            if (env.IsDevelopment())
  7.            {
  8.                app.UseDeveloperExceptionPage();
  9.                app.UseBrowserLink();
  10.            }            else
  11.            {
  12.                app.UseExceptionHandler("/Home/Error");
  13.            }
  14.            app.UseStaticFiles();
  15.            app.UseMvc(routes =>
  16.            {
  17.                routes.MapRoute(
  18.                    name: "default",
  19.                    template: "{controller=Home}/{action=Index}/{id?}");
  20.            });
  21.        }
  22.    }
  23. }

ASP.NET Core是通過(guò)對IApplicationBuilder進(jìn)行擴展來(lái)構建中間件的, 上面代碼中每個(gè)use擴展方法都是將中間件添加到請求管道。也可以給Configure方法附加服務(wù)(如:IHostingEnvironment)這些服務(wù)在ConfigureServices方法中被初始化。

用ASP.NET Core項目模板添加的應用程序,默認添加的幾個(gè)中間件:

  • UseStaticFiles 允許應用程序提供靜態(tài)資源。

  • UseMvc 將MVC添加到管道并允許配置路由。

ConfigureServices

ConfigureServices方法是應用程序運行時(shí)將服務(wù)添加到容器中,用ASP.NET Core項目模板的時(shí)候默認會(huì )將MVC的服務(wù)添加到容器中:

  1. public void ConfigureServices(IServiceCollection services){
  2.    services.AddMvc();
  3. }

接下來(lái)舉一個(gè)例子,在實(shí)際應用中ConfigureServices方法和Configure方法配合使用,在A(yíng)SP.NET Core中有一個(gè)UI開(kāi)發(fā)框架Telerik UI for ASP.NET Core,它有60多個(gè)UI組件,不僅支持ASP.NET Core的跨平臺布署模式,而且還支持前端自適應渲染。

當在項目中應用Telerik UI的時(shí)候,首先在項目中引用相關(guān)的包,然后再在ConfigureServices方法中將Kendo UI服務(wù)添加到容器中:

  1. public void ConfigureServices(IServiceCollection services){
  2.    services.AddKendo();
  3. }

接下來(lái),在Configure中設置Kendo UI

  1. public void Configure(IApplicationBuilder app, IHostingEnvironment env){    //...
  2.    app.UseKendo(env);
  3. }

1.2.2. appsetting.json配置

Configuration API 提供了一個(gè)基于鍵-值對來(lái)配置應用程序的方法,在運行時(shí)可以從多個(gè)來(lái)源來(lái)讀取配置。鍵-值對可以分組形成多層結構。鍵-值對可以配置在不同的地方,如:文件、內存等,其中放在內存中不能持久化,這里筆者選擇將其配置在appsetting.json文件里面。

配置appsetting文件

  1. {
  2.  "key1": "字符串",
  3.  "key2": 2,
  4.  "key3":true,
  5.  "parentObj": {
  6.    "key1": "sub-key1"
  7.  },
  8.  "members": [
  9.    {
  10.      "name": "Lily",
  11.      "age": "18"
  12.    },
  13.    {
  14.      "name": "Lucy",
  15.      "age": "17"
  16.    }
  17.  ]}

一個(gè)分層結構的JSON文件,鍵(如:key1)作為索引器,值作為參數,類(lèi)型可以為:字符串、數字、布爾、對象、數組。下面具體來(lái)看下在應用中怎樣使用。

在應用程序加加載和應用配置文件

  1. public static IConfigurationRoot Configuration { get; set; }

    public static void Main(string[] args = null){  

     var builder = new ConfigurationBuilder()
  2.        .SetBasePath(Directory.GetCurrentDirectory())
  3.        .AddJsonFile("appsettings.json");
  4.    Configuration = builder.Build();
  5.    Console.WriteLine($"key1 = {Configuration["key1"]}");
  6.    Console.WriteLine($"key2 = {Configuration["key2"]}");
  7.    Console.WriteLine(
  8.        $"subkey1 = {Configuration["parentObj:key1"]}");
  9.    Console.WriteLine();
  10.    Console.WriteLine("members:");
  11.    Console.Write($"{Configuration["members:0:name"]}, ");
  12.    Console.WriteLine($"age {Configuration["members:0:age"]}");
  13.    Console.Write($"{Configuration["members:1:name"]}, ");
  14.    Console.WriteLine($"age {Configuration["members:1:age"]}");
  15.    Console.WriteLine();
  16.    Console.WriteLine("Press a key...");
  17.    Console.ReadKey();
  18. }

由于加載的是一個(gè)JSON文件,所以文件加載進(jìn)來(lái)以后程序可以直接將它當作一個(gè)JSON對象來(lái)使用。如果有過(guò)動(dòng)態(tài)語(yǔ)言使用經(jīng)驗的同學(xué)來(lái)說(shuō)這種方式就比較熟悉了。只在這里訪(fǎng)問(wèn)屬性的時(shí)候將平時(shí)常見(jiàn)的.變成了:,這和寫(xiě)的JSON對象更接近。

1.3. 處理管道(中間件)

在A(yíng)SP.NET Core應用程序中使用中間件,應用程序所做的任何事情(包括服務(wù)器中的靜態(tài)文件)都是由中間件來(lái)完成的。沒(méi)有任何中間件的應用程序在請求的出錯時(shí)候簡(jiǎn)單返回404 Not Found。中間件可以讓您完全控制請求的處理方式,并且讓您的應用程序更加精簡(jiǎn)。

當接收到一個(gè)請求時(shí),請求會(huì )交給中間件構成的中間件管道進(jìn)行處理,管道就是多個(gè)中間件構成,請求從一個(gè)中間件的一端進(jìn)入,從中間件的另一端出來(lái),每個(gè)中間件都可以對HttpContext請求開(kāi)始和結束進(jìn)行處理:

在A(yíng)SP.NET Core中可以用Run、Map和Use三種方式來(lái)配置HTTP管道。Run 方法稱(chēng)為短路管道(因為它不會(huì )調用 next 請求委托)。因此,Run方法一般在管道尾部被調用。Run 是一種慣例,有些中間件組件可能會(huì )暴露他們自己的 Run方法,而這些方法只能在管道末尾處運行。下面兩段代碼是等效的,因為Use沒(méi)有調用next方法

Run方法示例代碼

  1. public void Configure(IApplicationBuilder app, IHostingEnvironment env){
  2.    app.Run(async context =>
  3.        {            await context.Response.WriteAsync("environment " + env);
  4.        });
  5. }

Use方法不執行next時(shí)示例代碼

  1. public void Configure(IApplicationBuilder app, IHostingEnvironment env){
  2.    app.Use(async (context, next) =>
  3.        {            await context.Response.WriteAsync("environment " + env);
  4.        });
  5. }

在.NET Core 中約定了Map*擴展被用于分支管道,當前的實(shí)現已支持基于請求路徑或使用謂詞來(lái)進(jìn)入分支。Map擴展方法用于匹配基于請求路徑的請求委托。Map只接受路徑,并配置單獨的中間件管道的功能。

  1. private static void HandleMapUrl(IApplicationBuilder app){
  2.    app.Run(async context =>
  3.    {      
     await context.Response.WriteAsync("Map Url Test Successful");
  4.    });
  5. }public void ConfigureMapping(IApplicationBuilder app, IHostingEnvironment env){
  6.    app.Map("/mapurl", HandleMapUrl);
  7. }

上例中是一個(gè)用Map方法來(lái)接受路徑進(jìn)入分支管道,也就是說(shuō)所有基于/mapurl路徑請求都會(huì )被管道中的HandleMapUrl方法所處理;如果想用謂詞來(lái)進(jìn)入中間件分支,則要使用MapThen方法。MapThen方法允許以一種非常靈活的方式構建中間管道。比如可以檢測查詢(xún)字符串是否具有'branch'來(lái)進(jìn)入分支:

  1. private static void HandleBranch(IApplicationBuilder app){
  2.    app.Run(async context =>
  3.    {      
     await context.Response.WriteAsync("Branch used.");
  4.    });
  5. }
     public void Configure(IApplicationBuilder app){
  6.    app.MapWhen(context => {        return context.Request.Query.ContainsKey("branch");
  7.    }, HandleBranch);
  8. }

1.4 總結

  • 這節講解了ASP.NET Core在運行時(shí)首先加載Program類(lèi)下面的Main方法,在Main方法中指定托管服務(wù)器,并調用Startup類(lèi)中的ConfigureConfigureServices方法等完成初始化;

  • 在A(yíng)SP.NET Core中 HTTP請求是以中間件管道的形式進(jìn)行處理,每個(gè)中間件都可以在HTTP請求開(kāi)始和結束處理對它進(jìn)行處理;

  • ASP.NET Core可以構建跨平臺應用,服務(wù)運行在Http.Sys(僅適用于Windows平臺)和Kestrel上,不需要用IIS進(jìn)行托管,所以相比傳統ASP.NET來(lái)說(shuō)性能更高效也更加靈活。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Asp.Net Core 3.1學(xué)習- 應用程序的啟動(dòng)過(guò)程(5)
ASP.NET Core端點(diǎn)路由 作用原理
ASP.NET Core 中的配置
ASP.NET Core筆記(1) - 了解Startup類(lèi)
ASP.NET Core 介紹和項目解讀
13.在A(yíng)SP.NET Core中配置中間件組件
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久