這樣入門asp.net core,如何

来源:https://www.cnblogs.com/cqhaibin/archive/2018/03/18/8596607.html
-Advertisement-
Play Games

本文章主要說明asp.net core的創建和簡單使用。 一、使用到的命令 dotnet new :創建項目(解決方案,類庫,單元測試等),如:dotnet new web dotnet add package 添加一個nuget的引用 dotnet test:運行測試 dotnet build:編 ...


本文章主要說明asp.net core的創建和簡單使用。

一、使用到的命令

  • dotnet new :創建項目(解決方案,類庫,單元測試等),如:dotnet new web
  • dotnet add package 添加一個nuget的引用
  • dotnet test:運行測試
  • dotnet build:編譯項目
  • dotnet sln add:將項目添加到解決方案
  • dotnet add reference:對此項目添加項目引用

二、建立空項目

  • 在測試目錄下運行 dotnet new web -n baseWeb,創建web項目,結果如下圖所示:
  • image
  • 運行 dotnet run,即可運行此項目,此命令內部會執行dotnet build命令編譯項目,然後運行,結果如下:
  • image
    說明:此命令是在sln(解決方案)文件所在目錄運行的,所以增加了-p參數,用於指定啟動指定的項目。

三、引入mvc

  • 由於我們創建是一個空web項目,是沒有mvc相關依賴包的,所以首先需要運行dotnet add package Microsoft.AspNet.Mvc 進行依賴包的安裝
  • 然後在StartUp類的ConfigureServices方法中添加如下代碼:
public void ConfigureServices(IServiceCollection service){
    service.AddMvc();
    service.AddRouting();
}

上述添加此添加了Mvc,也添加了路由

  • 配置路由,還是在StartUp類中,其方法為Configure添加如下代碼:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    
    //添加的代碼
    app.UseMvc(routers=>{
        routers.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
    });

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}
  • 對controller和view的創建
    在創建controller時,沒有找到完全好的 命令創建方法,所以使用的是手動創建文件,然後繼承Controller類實現;而view是可以通過dotnet new page實現的,但也可以使用手動創建。文件結果如下:
    image
  • 執行dotnet run運行,然後網頁訪問對就的地址即可
    image

四、更換依賴註入為autofac

aspnet core是自帶了依賴註入功能的,就是StartUp類中ConfigureServices方法的IServiceCollection類型的形參。如果你想替換為autofac。請參考如下步驟

  • 安裝autofac,以及acutofac的擴展類
    • Autofac
    • Autofac.Extensions.DependencyInjection
  • 更改StartUp類中的configureSeervices方法
public IServiceProvider ConfigureServices(IServiceCollection service){
    service.AddMvc();
    service.AddRouting();
    var containerBuilder = new ContainerBuilder();
    containerBuilder.Populate(service);
    containerBuilder.RegisterType<Services.ProductService>().As<Services.IProductService>();
    var container = containerBuilder.Build(); 
    return new AutofacServiceProvider(container);
}
  • 其中,我們更改了ConfigureServices方法的返回值,由void換成IServiceProvider;此返回為AutofacServiceProvider類的一個實例;在上述過程中,使用了continerBuilder.Populate方法將service(IServiceCollection的實例對象)註入到autofac中。
  • 其中為了測試DI能力,我們創建一個IProductService的註入,併在Controller中使用,相關代碼如下:
    • IProductService
namespace baseWeb.Services
{
    public interface IProductService
    {
        int Get(int id);
    }  
}
  • ProductService
using System.Collections.Generic;

namespace baseWeb.Services
{
    public class ProductService:IProductService
    {
        List<int> ls = new List<int>();
        
        public ProductService(){
            for(var i=0; i<10; i++){
                ls.Add(i+10);
            }
        }
        public int Get(int id){
            return ls[id];
        }
    }
}
  • HomeController
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;

namespace baseWeb.Controllers
{
    public class HomeController:Controller
    {
        private Services.IProductService productService;

        public HomeController(Services.IProductService productService){
            this.productService = productService;
        }

        public IActionResult Index(int id){
            ViewData["value"] = this.productService.Get(id);
            return View();
        }
    }
}
  • 運行結果如下:
    image

五、加入單元測試

在實際開發中,經常需要用到單元測試。.net core的單元測試也是如此的 so easy, fallow me。

  • 運行dotnet new xunit -n baseWebTest,即可創建一個以xunit為測試框架的單元測試項目
  • 運行dotnet add package Moq,安裝Moq模擬框架(此命令需要進入到baseWebTest項目文件夾後運行)
  • 運行dotnet add reference ../baseWeb/baseWeb.csproj,將baseWeb項目引入到此項目中。
  • 編寫單元測試代碼如下:
using System;
using Xunit;
using Moq;
using baseWeb.Controllers;
using baseWeb.Services;
using Microsoft.AspNetCore.Mvc;

namespace basewebtest
{
    public class DemoTest
    {
        [Fact]
        public void Test1()
        {
            var productServiceMock = new Mock<IProductService>();
            productServiceMock.Setup(service=>service.Get(1)).Returns((int id)=>{
                return id+10;
            });
            var _controller = new HomeController(productServiceMock.Object);

            var result = _controller.Index(1);
            var objectResult = Assert.IsType<ViewResult>(result);
            var destResult = Assert.IsAssignableFrom<int>(objectResult.ViewData["value"]);
            Assert.Equal(11, destResult);
        }
    }
}
  • 運行dotnet test -p ./baseWebtest/baseWebtest.csproj即可,看到如下結果:
  • image

六、其他

  • 如果你是使用vscode編寫,那麼測試項目是可以在編譯器中進行運行和調試的
    image
  • 下載測試源碼

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

-Advertisement-
Play Games
更多相關文章
  • 基於java版本的掃碼支付開發 最近做了一個電商,其中有涉及關於支付的問題,花了點小小的時間。因此寫了一個小demo,不能說完美,但是能實現下訂單掃碼支付功能。這裡我選擇的技術是J2EE中的servlet和jsp,支付環境採用的是支付寶中的沙箱環境(基於本人沒有企業級或者個人營業執照,無法申請支付接 ...
  • 前言 在開始工作至今,學習各種各樣的技術之中發現自己的很多Java的基礎知識都忘了⊙﹏⊙b汗。。。 而且越是學習越是發現Java基礎的重要性,所以準備單獨抽一下時間進行Java基礎的重新學習。在重新學習的時候,對這些又有了不同的感悟,於是準備將這些都記載下來,並整理成博客,希望能夠幫助那些需要的人。 ...
  • 1.編程語言的分類 機器語言:二進位指令編程,直接操作硬體,運行效率高,開發效率低 彙編語言:用英文標簽代替二進位指令,也是直接操作硬體,運行效率高,開發效率低 高級語言:用人類的字元編寫程式,電腦無法理解,必須翻譯為電腦能夠理解的語言,才能執行,分為兩種 編譯型,解釋型 編譯型:如c語言,編譯 ...
  • fail fast 機制是Java集合(Collection)中的一種錯誤機制。當多個線程對同一個集合的內容進行操作時,就可能會產生fail fast(快速失敗)事件。例如:當某一個線程A通過iterator去遍歷某集合的過程中,若該集合的內容被其他線程所改變了;那麼線程A訪問集合時,就會拋出Con ...
  • 當在angularjs去顯示一個時間時,如原原本本去顯示這個值,它將顯示一個怪怪的字元串,其實它就是被系列化json之後的字元串。如:一個空值顯示為日期時間:如果非空值顯示為日期時間的情形: 為了能正常顯示,我得需要先將這json的字元串,進行返系列化,創建angularjs的過濾器filter: ...
  • GitHub Flavored Markdown 今天研究了一天Markdown移動端和pc端統一實現方式,由於以前有搞過移動端富文本編輯器,搞Markdown簡單多了; 其中GFM的表情語法不錯,比如笑臉:smile:,準備採用一下。 又想到了手機輸入法輸入表情瀏覽器頁面接收到的是一個字元,如果能 ...
  • 作為一個剛剛接觸C#和XAML的新手,首先就是要搞清楚這二者之間的關係。XAML的中文名稱為可擴展應用程式標記語言,而C#則是運行於.NET Framework之上的高級程式設計語言,可以理解為使用XAML製作UWP的用戶使用界面,而使用C#來完成內部的邏輯實現。 簡單類比QT應該就是.ui文件和. ...
  • 為 Debian 8 或 Debian 9(64 位)安裝 .NET Core,在 Debian 8 或 Debian 9(64 位)上安裝 .NET Core 的具體步驟 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...