【asp.net core 系列】 1 帶你瞭解一下asp.net core

来源:https://www.cnblogs.com/c7jie/archive/2020/05/29/12989958.html
-Advertisement-
Play Games

0. 前言 這是一個新的系列,名字是《ASP.NET Core 入門到實戰》。這個系列主講ASP.NET Core MVC,輔助一些前端的基礎知識(能用來實現我們需要的即可,並非主講)。同時這個系列也會在後續介紹ASP.NET Core 平臺的其它類型的項目,並帶領大家以各個類型的項目為主要架構開發 ...


0. 前言

這是一個新的系列,名字是《ASP.NET Core 入門到實戰》。這個系列主講ASP.NET Core MVC,輔助一些前端的基礎知識(能用來實現我們需要的即可,並非主講)。同時這個系列也會在後續介紹ASP.NET Core 平臺的其它類型的項目,並帶領大家以各個類型的項目為主要架構開發一個網站或者網路服務中心。

下圖是官網關於Asp.net Core支持的項目的介紹

image-20200528225514637

1. ASP.NET Core 介紹

這一節我將為大家介紹一下 asp.net core的發展歷程。

最早,微軟為了替代CGI腳本開發了asp應用。ASP 全程 Active Server Page,意思是活動的伺服器網頁。ASP是一種HTML+伺服器代碼的組合,其尾碼是.asp 。

在2001年,微軟宣佈將asp遷移到.NET Framework上,形成了一種新的腳本語言——名為asp.net。在2002年發佈第一版,名為ASP.NET 1.0,附屬在.NET Framework 1.0 上。ASP.NET 不僅僅是asp + ,更是 asp + .net 。結合了.net之後的asp.net 更加強大。

在2008年之前的某一年,asp.net mvc 上線了。從此之後,asp.net 分為了兩種技術:asp.net webform(也就是原有的asp.net);asp.net mvc。MVC極大的減少了在前臺頁面中設置大量的伺服器腳本,同時MVC更貼近與HTML語言,使得程式開發工程師和前端能更好的配合 。

在2016年,微軟為了實現自己的跨平臺戰略,將.NET Framework提取出了.NET Core版本,同年發佈1.0版本。與此同時發佈了asp.net core RTM版,正式版發佈於2017年。

從此.net core帶著它的小伙伴 EF Core和ASP.NET Core一路高歌猛進,然後發展成瞭如今的現狀。

當然,以上內容省略了大量的情節,有興趣的小伙伴可以自行查閱相關資料。這裡就不做過多的介紹了,因為篇幅太長了,而且也會偏離主線。

1.1 為什麼是 ASP.NET Core

那麼,為什麼我們選擇了ASP.NET Core呢?目前市面上還有很多行業系統和領域相關係統都使用著 ASP.NET Webform,市場占比依舊不小。但是我們要考慮一件事情,那就是先行者優勢和彎道超車。

現在的情況是,老的技術市場已經站滿了人,新的技術市場還空空如也(當然,在我發這篇文章的時候---2020-5-29---asp.net core已經不算新了)。如果想入場一個技術,那麼最適合的就是學最新的。

再者,ASP.NET Core支持跨平臺。最早.net是不支持跨平臺的,後來是Mono 經過努力讓.net 開始支持跨平臺。後來微軟提出了跨平臺戰略和物聯網戰略,才提出正式的跨平臺實現。

那麼,我想到這裡理由還是比較充分了。

1.2 為什麼是MVC

MVC也就是Model-View-Controller的簡稱,意思是模型-視圖-控制器。它的通信流程是這樣的:

  • 用戶訪問界面(View),提交請求(包括訪問請求)
  • 界面向控制器(Controller)轉送用戶的請求,併進行一定程度封裝
  • 控制器(Controller)處理並完成後,以Model的形式返回給View
  • View解析返回的Model,然後繪製界面展示給用戶

MVC降低了頁面和控制器的耦合,簡單的講就是極大的減少了頁面上的伺服器腳本。另外,增強了頁面復用。ASP.NET Core MVC 在這一方便進一步優化了,又減少了不符合HTML格式的標簽。

當然,MVC還有更多的好處。不過,最主要的一點就是,MVC可以讓你離那些大佬更近一步(意思就是能讓你獲得一個工作)。

2. ASP.NET Core 入門

在上一節,我胡扯了一堆,說不定打消了很多人的興趣,哈哈,開個玩笑。讓我們正式開始來試試ASP.NET Core。

  1. 先創建一個解決方案:

    dotnet new sln --name AspDemo
    
  2. 創建一個MVC項目然後加入到解決方案

    dotnet new mvc --name MvcWeb
    dotnet sln add MvcWeb
    

這時候,如果不出意外的話,你能在AspDemo目錄下看到如下目錄結構:

├── AspCoreDemo.sln
└── MvcWeb
    ├── appsettings.Development.json
    ├── appsettings.json
    ├── Controllers
    │   └── HomeController.cs
    ├── Models
    │   └── ErrorViewModel.cs
    ├── MvcWeb.csproj
    ├── obj
    │   ├── MvcWeb.csproj.nuget.dgspec.json
    │   ├── MvcWeb.csproj.nuget.g.props
    │   ├── MvcWeb.csproj.nuget.g.targets
    │   ├── project.assets.json
    │   └── project.nuget.cache
    ├── Program.cs
    ├── Properties
    │   └── launchSettings.json
    ├── Startup.cs
    ├── Views
    │   ├── Home
    │   │   ├── Index.cshtml
    │   │   └── Privacy.cshtml
    │   ├── Shared
    │   │   ├── Error.cshtml
    │   │   ├── _Layout.cshtml
    │   │   └── _ValidationScriptsPartial.cshtml
    │   ├── _ViewImports.cshtml
    │   └── _ViewStart.cshtml
    └── wwwroot
        ├── css
        │   └── site.css
        ├── favicon.ico
        ├── js
        │   └── site.js
        └── lib
            ├── bootstrap
            │   ├── dist
            │   │   ├── css
            │   │   │   ├── bootstrap.css
            │   │   │   ├── bootstrap.css.map
            │   │   │   ├── bootstrap-grid.css
            │   │   │   ├── bootstrap-grid.css.map
            │   │   │   ├── bootstrap-grid.min.css
            │   │   │   ├── bootstrap-grid.min.css.map
            │   │   │   ├── bootstrap.min.css
            │   │   │   ├── bootstrap.min.css.map
            │   │   │   ├── bootstrap-reboot.css
            │   │   │   ├── bootstrap-reboot.css.map
            │   │   │   ├── bootstrap-reboot.min.css
            │   │   │   └── bootstrap-reboot.min.css.map
            │   │   └── js
            │   │       ├── bootstrap.bundle.js
            │   │       ├── bootstrap.bundle.js.map
            │   │       ├── bootstrap.bundle.min.js
            │   │       ├── bootstrap.bundle.min.js.map
            │   │       ├── bootstrap.js
            │   │       ├── bootstrap.js.map
            │   │       ├── bootstrap.min.js
            │   │       └── bootstrap.min.js.map
            │   └── LICENSE
            ├── jquery
            │   ├── dist
            │   │   ├── jquery.js
            │   │   ├── jquery.min.js
            │   │   └── jquery.min.map
            │   └── LICENSE.txt
            ├── jquery-validation
            │   ├── dist
            │   │   ├── additional-methods.js
            │   │   ├── additional-methods.min.js
            │   │   ├── jquery.validate.js
            │   │   └── jquery.validate.min.js
            │   └── LICENSE.md
            └── jquery-validation-unobtrusive
                ├── jquery.validate.unobtrusive.js
                ├── jquery.validate.unobtrusive.min.js
                └── LICENSE.txt

簡單介紹一下MvcWeb項目中的幾個目錄:

  • Controllers 里存放著控制器,負責處理視圖回傳的數據
  • Models 里存放著Model層代碼,目錄名稱不強求,也不一定非要在這裡
  • Views 存放著視圖路徑,這個是固定名稱
  • wwwroot 用來存放一些js腳本和css樣式表
  • obj 目錄是編譯生成的目錄,暫時不用過多的關心。

那麼,接下來運行一下這個項目看看效果:

cd MvcWeb
dotnet run
# 或者
dotnet run --porject MvcWeb

如果出現如下內容表示項目已經啟動完成了:

image-20200529104450723

然後在瀏覽器中輸入:

http://localhost:5000

然後就能看到如下內容:

image-20200529104631103

目前是一個空蕩蕩的項目,不要急,在這個系列之後的文章中我們會繼續豐富這個項目,讓它的內容更加豐富更加符合我們的需要。

3. Program.cs

有沒有覺得這個名字很熟悉?沒錯,我們之前每次演示使用的都是控制台程式,就有一個Program.cs文件,裡面有一個Main方法。我們知道,Main方法是一個程式的入口。之前的Asp.net項目並沒有這個方法,是因為之前的項目都是依托在IIS上。而asp.net core脫離了IIS,使其可以直接運行,所以就有一個入口方法。

代碼應當如下:

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>();
        });
}

3.1 修改埠

在我們使用的時候,經常會出現埠被占用的情況,這時候就需要我們設置一下埠了。設置方法如下:

webBuilder.UseUrls("http://*:5006");

然後重啟項目,就可以發現埠已經發生改變。

4. Setup.cs

這個類用來配置服務和應用的請求管道。這是一個約定的名稱。初始版本的類文件應該是這樣的:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

5. 總結

這一篇簡單的帶領大家一起看了下asp.net core MVC項目。可以說這是最能提現微軟的約定優於配置這句話的項目。MVC項目配置、繼承都很少。所有的方法和類都是通過約定好的名稱和參數列表來區分。所以在開發MVC項目適合,發現效果和預期不太一致的時候,看一下是不是有拼寫錯誤。

嗯,這一篇就到這了。《asp.net core 系列》期待你的關註,下一篇將介紹如何編寫一個控制器並訪問它。

更多內容煩請關註我的博客《高先生小屋》

file


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

-Advertisement-
Play Games
更多相關文章
  • ​ 之前寫過很多次關於Java學習指南、Java技術路線圖的文章。但是總還是有小伙伴來問我,Java怎麼學,項目怎麼做,資源怎麼找,真是讓人頭禿。 於是這次黃小斜決定來一波狠的,把所有這些內容都整理起來,做成一份非常硬核的Java學習指南+路線圖,一篇文章搞定Java學習,360度無死角(可能)如果 ...
  • ORM 1. 資料庫配置 配置使用sqlite3,mysql,oracle,postgresql等資料庫 sqlite3資料庫配置 DATABASES = { 'default': { # 預設使用的資料庫引擎是sqlite3,項目自動創建 'ENGINE': 'django.db.backends ...
  • leetcode-8. 字元串轉換整數 (atoi)。 請你來實現一個 atoi 函數,使其能將字元串轉換成整數。 首先,該函數會根據需要丟棄無用的開頭空格字元,直到尋找到第一個非空格的字元為止。接下來的轉化規則如下: 如果第一個非空字元為正或者負號時,則將該符號與之後面儘可能多的連續數字字元組合起 ...
  • 背景 隊列[Queue]:是一種限定僅在表頭進行刪除操作,僅在表尾進行插入操作的線性表;即先進先出(FIFO-first in first out):最先插入的元素最先出來。 本文通過編碼實現鏈式隊列類,並模擬一個有趣的應用,能夠幫助我們對鏈式隊列有更深度的理解。 基本概念 結點 每個元素,除了存儲 ...
  • 前言 - strlen 概述 無意間掃到 glibc strlen.c 中代碼, 久久不能忘懷. 在一無所知的編程生涯中又記起點點滴滴: 編程可不是兒戲 ❀, 有些難, 也有些不捨. 隨軌跡一同重溫, 曾經最熟悉的 strlen 手感吧 ~ /* Copyright (C) 1991-2020 Fr ...
  • 1. Java 虛擬機是什麼? 1.1 虛擬機 虛擬機:虛擬的電腦,一個用來執行虛擬電腦指令的軟體。 虛擬機分為系統虛擬機和程式虛擬機。 系統虛擬機:提供一個可運行完整操作系統的軟體平臺,如 Visual Box、VMware。 程式虛擬機:專門執行單個程式的,典型代表 Java 虛擬機。Jav ...
  • leetcode-7. 整數反轉。 給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。 示例 1: 輸入: 123 輸出: 321 示例 2: 輸入: -123 輸出: -321 示例 3: 輸入: 120 輸出: 21 註意: 假設環境只能存儲得下 32 位的有符號整數,則其 ...
  • 我寫了一個Winform測試程式,用的System.Timers.Timer,在事件里,設置label1.Text,然後,居然句柄泄漏、用戶對象泄漏! 百思不得其解,最後換成System.Windows.Forms.Timer,居然不泄漏了! 最近睡眠不足,哪怕一個很小的問題,隨便搞搞,都半夜了! ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...