ASP.NET Core MVC學習筆記

来源:https://www.cnblogs.com/HappyBear/archive/2020/02/19/12329540.html
-Advertisement-
Play Games

最近由於疫情緊張,遂在家辦公,在領導的帶領下,學習了一下.Net Core MVC。 一,構建web應用 1.選擇c#-所有平臺-web 找到ASP.NET Core web應用程式 2.項目命名之後轉至如下界面:選擇Web應用程式(模型視圖控制器)。 Ok點擊創建,這個項目的基本框架就生成了。 二 ...


最近由於疫情緊張,遂在家辦公,在領導的帶領下,學習了一下.Net Core MVC。

 

一,構建web應用

1.選擇c#-所有平臺-web  找到ASP.NET Core web應用程式

 

 2.項目命名之後轉至如下界面:選擇Web應用程式(模型視圖控制器)。

 

Ok點擊創建,這個項目的基本框架就生成了。

 

二,EF-Code First 數據遷移

1,在Models裡面新建實體類和資料庫上下文類,並添加相對應的引用和框架

 

具體代碼如下:

 實體類:

    public class InfoUser
    {
        [Key]
        [StringLength(10)]
        [DisplayName("用戶名")]
        [Required(ErrorMessage = "用戶名不能為空")]
        public string UserName { get; set; }
        [StringLength(16)]
        [DisplayName("密碼")]
        [Required(ErrorMessage = "密碼不能為空")]
        public string Password { get; set; }
        [DisplayName("創建日期")]
        public DateTime DTCreate { get; set; }
        [DisplayName("登陸日期")]
        public DateTime DTLogin { get; set; }

        public byte[] HeaderImg { get; set; }
    }
    /// <summary>
    /// 博客表
    /// </summary>
    public class InfoBlog
    {
        public int ID { get; set; }
        [StringLength(10)]
        public string UserName { get; set; }
        [StringLength(64)]
        public string Title { get; set; }

        public string Content { get; set; }
        public int VisitCount { get; set; }
        public DateTime DTCreate { get; set; }
    }
    /// <summary>
    /// 回覆表
    /// </summary>
    public class InfoReply
    {
        public int ID { get; set; }
        public int BlogID { get; set; }
        [StringLength(10)]
        public string UserName { get; set; }
        public string Content { get; set; }
        public DateTime DTCreate { get; set; }
    }
    /// <summary>
    /// 日誌表
    /// </summary>
    public class InfoLog
    {
        public int ID { get; set; }
        [StringLength(64)]
        public string Title { get; set; }
        public string Content { get; set; }
        public DateTime DTCerate { get; set; }

    }

上下文類(需要繼承DbContext):

 public class DBXlp : DbContext
    {
        public DBXlp(DbContextOptions<DBXlp> options)
         : base(options)
        {

        }
        //add-migration init update-database 
        public DbSet<InfoUser> InfoUsers { get; set; }
        public DbSet<InfoBlog> InfoBlogs { get; set; }
        public DbSet<InfoReply> InfoReplies { get; set; }
        public DbSet<InfoLog> InfoLogs { get; set; }

    }

 

2,通過NuGet添加下麵的兩個包

 

 

3,在appsettings.json裡面添加連接資料庫的字元串

 

{
    "ConnectionStrings": {
      "DbXlp": "Server=.;Database=dbXlp;User id=sa;Password=123456"
    },
    "Logging": {
      "LogLevel": {
        "Default": "Information",
        "Microsoft": "Warning",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    },
    "AllowedHosts": "*"
  }

  

4,然後在 Startup.cs 的 ConfigureServices(IServiceCollection services) 中,我們作為一個服務註冊了上下文對象。

services.AddDbContext<DBXlp>(options=>options.UseSqlServer(Configuration.GetConnectionString("DbXlp")));

5,打開 工具->NuGet包管理器->程式包管理器控制台

  1. 輸入命令:add-migration init(可隨意)(為掛起的Model變化添加遷移腳本 )
  2. 輸入命令:update-database( 將掛起的遷移更新到資料庫 )

 

 Ok 可以看到下麵資料庫里已經有了對應表信息!

三,使用Identity進行登錄驗證

在Startup中:

 1.定義一個string類型的CookieScheme作為認證方案

public const string CookieScheme = "Cookies";

2.ConfigureServices中使用AddCookie設置選項

 

    services.AddAuthentication(CookieScheme)
            .AddCookie(CookieScheme, option =>
            {
                // 登錄路徑:這是當用戶試圖訪問資源但未經過身份驗證時,程式將會將請求重定向到這個相對路徑。
                option.LoginPath = new PathString("/account/login");
                // 禁止訪問路徑:當用戶試圖訪問資源時,但未通過該資源的任何授權策略,請求將被重定向到這個相對路徑
                option.AccessDeniedPath = new PathString("/account/denied");
            });

  

3.在Configure方法中使用 UseAuthentication來調用認證中間件(如下圖所示位置)

 

控制器裡面:

創建一個包含用戶信息的 cookie可以構造一個ClaimsPrincipal。用戶信息會被序列化然後保存在cookie 裡面。

      public async Task<ActionResult> Logining()
        {
            var userName = Request.Form["UserName"];
            var password = Request.Form["Password"];
            var item = db.InfoUsers.Find(userName);
            if (item != null && password == item.Password)
            {
                item.DTLogin = DateTime.Now;
                db.SaveChanges();
                //用Claim來構造一個ClaimsIdentity,然後調用 SignInAsync 方法。
                var claims = new List<Claim>();
                claims.Add(new Claim(ClaimTypes.Name, userName));
                var claimsIdentity = new ClaimsIdentity(claims, "Cookies");
                //登錄
                await HttpContext.SignInAsync("Cookies", new ClaimsPrincipal(claimsIdentity));
                return RedirectToAction("Index", "Blog");
            }
            else
                ViewBag.Msg = "登陸失敗";
            return View();
        }
public async Task<IActionResult> Logout() { //退出 await HttpContext.SignOutAsync("Cookies"); return RedirectToAction("Index", "Home"); }

然後我們只需要對那些需要授權登陸才能執行的界面或者操作標記[Authorize]即可:

最後我們也可以在Razor中判斷是否授權成功:

@if (User.Identity.IsAuthenticated)
{
<textarea id="TextArea1" rows="10" class="form-control"></textarea>
    <button onclick="Reply()" class="btn btn-primary">回覆</button>
}
else
{
    <a asp-action="Login" asp-controller="Account">登錄</a>
}

 就寫到這裡。下次繼續!

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 從今天開始,將會逐步介紹關於DUbbo的有關知識。首先先簡單介紹一下DUbbo的整體概述。 概述 Dubbo是SOA(面向服務架構)服務治理方案的核心框架。用於分散式調用,其重點在於分散式的治理。 簡單的來說,可以把它分為四個角色。服務提供方(Provider)、服務消費方(Consumer)、註冊 ...
  • 在上一篇文章 Dubbo之服務暴露分析 中介紹了當遠程暴露時,如果有註冊中心,需要在服務暴露後再將服務註冊到註冊中心。該篇將介紹該功能的有關步驟。 註冊的起點 在 方法包含了服務導出,註冊,以及數據訂閱等邏輯。其中服務註冊先調用 方法。 可以看出,服務註冊主要包括兩部分, 獲取註冊中心實例 和 向註 ...
  • Dubbo的服務暴露是一個重要的特性,瞭解其機制很重要。之前有很多人寫了有關的源代碼分析,在本文中不再重新分析。官方文檔中的一篇寫的就很好,本文主要是有關內容進行補充與總結。 傳送門: "服務導出" 為什麼要服務暴露 服務暴露分為遠程暴露和本地暴露。在遠程服務暴露中會將服務信息上傳到註冊中心。這時客 ...
  • 前面幾章介紹了處理適量適中的圖形內容的最佳方法。通過使用幾何圖形、圖畫和路徑,可以降低2D圖形的開銷。即使正在使用複雜的具有分層效果的組合形狀和漸變畫刷,這種方法也仍然能夠正常得很好。 然而,這樣設計不適合需要渲染大量圖形元素的繪圖密集型應用程式。例如繪圖程式、演示粒子碰撞的物理模型程式或橫向卷軸形 ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7873322.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講行為型設計模式的第二個模式--命令模式,又稱為行動(Action)模式或交易(Transaction)模式,先從名字上來看。“命令模 ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7837716.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講行為型設計模式的第一個模式--模板方法模式,先從名字上來看。“模板方法”理解為有一個方法的名字叫“模板方法”,也可以換個理解方法: ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7814004.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講結構型設計模式的第七個模式,也是結構型設計模式中的最後一個模式--代理模式。先從名字上來看,“代理”可以理解為“代替”,代替“主人” ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7792973.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講結構型設計模式的第六個模式--享元模式,先從名字上來看,“享元”可以這樣理解--共用“單元”。單元是什麼呢?舉例說明:對於圖形而言就 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...