天天看點

向net core 3.0進擊——April.WebApi從2.2爬到3.0

文章目錄

      • 前言
      • 更新之路
        • 問題1
        • 問題2
        • 問題3
        • 問題4
        • 問題5
        • 問題6
      • 測試
      • 小結

前言

在之前對Swagger的變化做了調整後,就開始想着要不把之前的工程更新得了,這樣就還是個demo工程,來做各種測試(當然還是因為懶),這就有了今天這個比較折騰的一步。

更新之路

首先,April.WebApi工程右鍵->屬性,将之前的net core 2.2更新到3.0,然後對每個類庫項目右鍵->屬性,将net standard 2.0更新到2.1(這個應該是沒啥)。

更新之後,我們重新生成一下,咦,沒報錯美滋滋。

因為之前有過建立3.0的工程例子,是以對于Startup這塊兒還是要調整下的。

問題1

向net core 3.0進擊——April.WebApi從2.2爬到3.0
向net core 3.0進擊——April.WebApi從2.2爬到3.0
向net core 3.0進擊——April.WebApi從2.2爬到3.0

因為net core3.0之後,對于Api可能是調整了(因為沒建立過Mvc工程),是以這個地方不再模糊的使用Mvc了。

  • 修改後

因為部分方法被棄用,因為3.0是一個嶄新的開始,在開頭添加Microsoft.Extensions.Hosting的引用。

向net core 3.0進擊——April.WebApi從2.2爬到3.0
向net core 3.0進擊——April.WebApi從2.2爬到3.0
向net core 3.0進擊——April.WebApi從2.2爬到3.0

好了,修改完啟動檔案,我們來愉快的運作吧。

問題2

向net core 3.0進擊——April.WebApi從2.2爬到3.0

開頭都這麼難麼,我們來看下這個錯誤,好了是跨域的問題,現在不讓AllowAll了是吧,并不是,是因為我們又要允許所有通路,還能帶上Cookie,現在不讓這樣搞了。

  • 修改後
    向net core 3.0進擊——April.WebApi從2.2爬到3.0
    這個問題修改完後,我們再來運作下程式。

問題3

向net core 3.0進擊——April.WebApi從2.2爬到3.0

這個是什麼問題呢,Session也不讓這樣玩了,也不是,主要問題呢是現在不需要WebHost了,Session的實作不明确了應該是,是以我們來該更新的更新,該調整的調整,其他工程引入的同樣需要更新下。

  • 修改
    向net core 3.0進擊——April.WebApi從2.2爬到3.0
這個地方因為我在看到錯誤後直接來這更新了,沒有截到圖,更新的庫名Microsoft.VisualStudio.Web.CodeGeneration.Design。

修改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>();
                });
    }
           
  • 補充

在下面的執行時,我發現使用Session會有問題,具體什麼問題呢,因為3.0多了一個注冊項,是以session的代碼調整如下,這裡注意下UseSession的位置要在Redirection之後。

public void ConfigureServices(IServiceCollection services)
        {
        	…
            #region Session
            services.AddDistributedMemoryCache();
            services.AddSession(options =>
            {
                options.Cookie.Name = "April.Session";
                options.IdleTimeout = TimeSpan.FromSeconds(2000);//設定session的過期時間
                options.Cookie.HttpOnly = true;//設定在浏覽器不能通過js獲得該cookie的值,實際場景根據自身需要
                options.Cookie.IsEssential = true;
            });
            #endregion
            …
        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
        	…
            app.UseHttpsRedirection();

            app.UseSession();

            app.UseRouting();
            …
        }
           

修改完成後,我們再來運作下程式。

問題4

向net core 3.0進擊——April.WebApi從2.2爬到3.0
  • 修改

這個我不需要翻譯軟體都能看到,這什麼什麼不讓傳回了,emm。

這個問題我感覺是3.0可能是還沒開始擴充,畢竟剛出想讓人還是老老實實用内置的DI吧,這裡我的處理方法,隻能是老老實實改回void,這個代碼就不用再展示了,不算是最好的解決方法。

讓我們忘記剛才的難受,繼續運作程式吧。

問題5

向net core 3.0進擊——April.WebApi從2.2爬到3.0

這個烏壓壓一大片我還以為浏覽器崩了呢,仔細一看,好吧,swagger的事,這裡就不多說了。

  • 修改

    具體參考向net core 3.0進擊——Swagger的改變

在我以為能看到友好的Swagger的時候,現實給了我一巴掌。

問題6

向net core 3.0進擊——April.WebApi從2.2爬到3.0

這個問題,依然是想用擴充的DI導緻的,AspectCore這塊兒的東西暫時先屏蔽了,後續找到解決方法之後再處理吧。

  • 修改
    向net core 3.0進擊——April.WebApi從2.2爬到3.0

經過以上一堆折騰後,我們終于迎來了Swagger歡迎的樣子,不容易。

向net core 3.0進擊——April.WebApi從2.2爬到3.0

測試

為什麼還要帶上這個呢,我也搞不懂,習慣了測試一下功能吧,但是這裡就不一一截圖了,太麻煩(當然測試也隻是簡單的執行了下之前的測試方法)。
  • log4功能正常
  • swagger功能正常
  • cache功能正常
  • session功能正常
  • cookie功能正常
  • sqlsugar功能正常
  • aop日志功能正常
  • redis功能正常
  • 攔截器與中間層功能正常
如果有我沒試到的問題,可以給我留言,因為一個人的力量終究還是有那麼點兒局限的。

小結

在覆寫原代碼的時候我想了一會兒,我擔心萬一有人在用呢,這樣覆寫後會不會對人有影響,但是轉念一想,唉,這東西怕是都沒人用吧,自己鼓搗的東西,還是折騰點兒好,折騰使人進步,折騰活躍大腦,折騰…,編不下去了,以後再鼓搗新東西就是直接net core3.0上搞起了。