使用 ASP.NET Core MVC 創建 Web API(六)

来源:https://www.cnblogs.com/chillsrc/archive/2019/05/07/10824919.html
-Advertisement-
Play Games

在之前的文章中我們是使用Rester來測試我們的WebAPI的。接下來,我們來創建一個實際的頁面來測試之前我們寫的WebAPI。我們創建一個HTML頁面,併在頁面使用 jQuery 來調用 Web API 。通過jQuery來調用增刪除改查WebAPI介面,並用 API 介面返回的響應中的詳細信息更... ...


使用 ASP.NET Core MVC 創建 Web API

使用 ASP.NET Core MVC 創建 Web API(一)

使用 ASP.NET Core MVC 創建 Web API(二)

 使用 ASP.NET Core MVC 創建 Web API(三)

使用 ASP.NET Core MVC 創建 Web API(四)

使用 ASP.NET Core MVC 創建 Web API(五)

十七、使用 jQuery 調用 API

    在之前的文章中我們是使用Rester來測試我們的WebAPI的。接下來,我們來創建一個實際的頁面來測試之前我們寫的WebAPI。我們創建一個HTML頁面,併在頁面使用 jQuery 來調用 Web API 。通過jQuery來調用增刪除改查WebAPI介面,並用 API 介面返回的響應中的詳細信息更新到頁面中。

    1) 在Visual Studio 2017的“解決方案資源管理器”中打開Startup.cs文件,並找到Configure方法,在方法中添加 app.UseStaticFiles()方法,配置應用提供靜態文件並啟用預設文件映射,代碼如下:     

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseDefaultFiles();
            app.UseStaticFiles();
            app.UseMvc();
        }

    2) 在Visual Studio 2017的“解決方案資源管理器”中,選中解決方案,點擊滑鼠右鍵,在彈出菜單中選擇“添加—》新建文件夾”,並把“新文件夾”命名為 wwwroot。如下圖。

 

      3) 在Visual Studio 2017的“解決方案資源管理器”中,選中“wwwroot”目錄,點擊滑鼠右鍵,在彈出菜單中選擇“添加—》新建項”,在彈出對話框中選擇“HTML頁”,併在名稱輸入框中輸入“index.html”,然後點擊“添加”按鈕。如下圖。

Index.html文件的內容如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>BOOK CRUD</title>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" 
integrity
="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <!-- 最新的 Bootstrap 核心 JavaScript 文件 --> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> </head> <body> <h1>BOOK CRUD</h1> <div class="container-fluid"> <div class="row-fluid"> <div class="col-xs-12 col-md-8"> <p id="counter"></p> <table class="table table-bordered"> <tr> <th>ID</th> <th>Name</th> <th>ReleaseDate</th> <th>Author</th> <th>Price</th> <th>Publishing</th> <th colspan="2"> <a class="btn btn-default btn-xs" onclick="getData()" role="button">刷新</a> </th> </tr> <tbody id="books"></tbody> </table> </div> <div class="col-md-2"> <form action="javascript:void(0);" method="POST" onsubmit="addItem()"> <fieldset> <legend>Add</legend> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label class="control-label">Name</label> <input id="AddName" class="form-control" /> </div> <div class="form-group"> <label class="control-label">ReleaseDate</label> <input id="AddReleaseDate" class="form-control" /> </div> <div class="form-group"> <label class="control-label">Author</label> <input id="AddAuthor" class="form-control" /> </div> <div class="form-group"> <label class="control-label">Price</label> <input id="AddPrice" class="form-control" /> </div> <div class="form-group"> <label class="control-label">Publishing</label> <input id="AddPublishing" class="form-control" /> </div> <div class="form-group"> <input type="submit" value="Add" class="btn btn-primary"> </div> </fieldset> </form> </div> <div class="col-md-2" id="spoiler"> <form class="my-form"> <fieldset> <legend>Edit</legend> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <input type="hidden" id="BookID" /> <input type="hidden" id="RowVersion" /> <div class="form-group"> <label class="control-label">Name</label> <input id="Name" class="form-control" /> </div> <div class="form-group"> <label class="control-label">ReleaseDate</label> <input id="ReleaseDate" class="form-control" /> </div> <div class="form-group"> <label class="control-label">Author</label> <input id="Author" class="form-control" /> </div> <div class="form-group"> <label class="control-label">Price</label> <input id="Price" class="form-control" /> </div> <div class="form-group"> <label class="control-label">Publishing</label> <input id="Publishing" class="form-control" /> </div> <div class="form-group"> <input type="submit" value="Save" class="btn btn-default" /> <a onclick="closeInput()" aria-label="Close">&#10006;</a> </div> </fieldset> </form> </div> </div> </div> <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script> <script src="site.js"></script> </body> </html>

 

    4) 在Visual Studio 2017的“解決方案資源管理器”中,選中“wwwroot”目錄,點擊滑鼠右鍵,在彈出菜單中選擇“添加—》新建項”,在彈出對話框中選擇“JavaScript文件”,併在名稱輸入框中輸入“site.js”,然後點擊“添加”按鈕。如下圖。

 

    5) 在site.js文件中添加如下 代碼:

const uri = "api/book";
let books = null;
function getCount(data) {
    const el = $("#counter");
    let name = "book";
    if (data) {
        if (data > 1) {
            name = "book-s";
        }

        el.text(data + " " + name);
    } else {
        el.text("No " + name);
    }
} 

$(document).ready(function () {
    getData();

}); 

function getData() {
    $.ajax({
        type: "GET",
        url: uri,
        cache: false,
        success: function (data) {
            const tBody = $("#books");
            $(tBody).empty();
            getCount(data.length);

            $.each(data, function (key, item) {
                const tr = $("<tr></tr>")
                    .append($("<td></td>").text(item.id))
                    .append($("<td></td>").text(item.name))
                    .append($("<td></td>").text(item.releaseDate))
                    .append($("<td></td>").text(item.author))
                    .append($("<td></td>").text(item.price))
                    .append($("<td></td>").text(item.publishing))
                    .append(
                        $("<td></td>").append(

  $("<button class=\"btn btn-default btn-sm\" >Edit</button>").on("click", function () {                                editItem(item.id);
                            })
                        )
                    )
                    .append(
                        $("<td></td>").append(

$("<button class=\"btn btn-default btn-sm\">Delete</button>").on("click", function () {                                deleteItem(item.id);
                            })
                        )
                    );
                tr.appendTo(tBody);
            });
            books = data;
        }
    });
} 

function addItem() {
    const item = {
        Name: $("#AddName").val(),
        ReleaseDate: $("#AddReleaseDate").val(),
        Author: $("#AddAuthor").val(),
        Publishing: $("#AddPublishing").val(),
        Price: $("#AddPrice").val(),     

        ID: 0
    }; 

    $.ajax({
        type: "POST",
        accepts: "application/json",
        url: uri,
        contentType: "application/json",
        data: JSON.stringify(item),
        error: function (jqXHR, textStatus, errorThrown) {
            alert("Something went wrong!");
        },

        success: function (result) {
            getData();
            $("#add-name").val("");
        }
    });
} 

function deleteItem(id) {
    $.ajax({
        url: uri + "/" + id,
        type: "DELETE",
        success: function (result) {
            getData();
        }
    });
} 

function editItem(id) {
    $.each(books, function (key, item) {
        if (item.id === id) {
            $("#Name").val(item.name);
            $("#BookID").val(item.id);
            $("#ReleaseDate").val(item.releaseDate);

            $("#Author").val(item.author);
            $("#Publishing").val(item.publishing);
            $("#Price").val(item.price);
            $("#RowVersion").val(item.rowVersion);
        }
    });
    $("#spoiler").css({ display: "block" });
} 

$(".my-form").on("submit", function () {
    const item = {
        Name: $("#Name").val(),
        ReleaseDate: $("#ReleaseDate").val(),
        Author: $("#Author").val(),
        Publishing: $("#Publishing").val(),
        Price: $("#Price").val(),
        RowVersion: $("#RowVersion").val(),
        ID: $("#BookID").val()
    }; 

    $.ajax({
        url: uri + "/" + $("#BookID").val(),
        type: "PUT",
        accepts: "application/json",
        contentType: "application/json",
        data: JSON.stringify(item),
        success: function (result) {
            getData();
        }
    }); 

    closeInput();
    return false;
}); 

function closeInput() {
    $("#spoiler").css({ display: "none" });
}

 

     6) 修改 ASP.NET Core 項目的啟動設置,以便對 HTML 頁面進行本地測試。在Visual Studio 2017中打開 Properties\launchSettings.json。

     7) 刪除 launchUrl 以便在項目的預設文件 index.html 強制打開應用。如下圖。

 

     此示例調用 API 的所有 CRUD 方法。 以下是 API 調用的說明。

    一)獲取書籍的列表

     我們寫的腳本中的getData 方法是通過jQuery ajax 函數將 GET 請求發送至 BookApi應用程式的GetBookItem方法,這個方法返回表示書籍數組的 JSON。 如果請求成功,則調用 success 回調函數。在該回調中將書籍信息組裝成表格更新到 DOM中。如下圖。

 

     二)添加書籍信息

     腳本中的addItem 方法通過JQuery 的Ajax 函數發送 POST請求,請求正文中包含書籍信息。 將 acceptscontentType 選項設置為 application/json,以便指定接收和發送的數據類型。 書籍信息使用 JSON.stringify 轉換為 JSON。 當 API 返回成功狀態的代碼時,將調用 getData 函數來更新 HTML 表格。如下圖。 

     三)  更新書籍信息

     editItem方法用來更新書籍信息,這個方法的實現與addItem類似。 url 更改為添加項的唯一標識符,並且 typePUT。如下圖。我們在表格點擊需要修改的書籍信息的“Edit”按鈕,系統會把這條書籍信息中的數據顯示到編輯文本框中,在進行修改之後,點擊“Save”按鈕,保存數據。

     四) 刪除書籍

      deleteItem方法用來刪除書籍信息,通過調用JQuery  AJAX函數發出刪除請求。並把 type 設為 DELETE ,指定該項在 URL 中的唯一標識符。如下圖中1與2,就是刪除前後的情況。我們點擊表格中的刪除按鈕,將調用腳本中的deleteItem方法,刪除指定書籍。

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 原文: Introducing .NET 5 今天,我們宣佈 .NET Core 3.0 之後的下一個版本將是 .NET 5 。這將是 .NET 系列的下一個重要版本。 將來只會有一個 .NET ,您將能夠使用它來開發 Windows,Linux,macOS,iOS,Android,tvOS,wat ...
  • https://www.jb51.net/article/157457.htm 下載32位版本安裝即可 *總結:如果你是web項目,你就下載x86的,發佈選anycpu就好了,然後設置應用程式池32位相容就好了; ...
  • 五一假期回來,練習一下C#的一些知識,瞭解一下排序。 練習數據: 寫一個類: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Ta ...
  • 直接切入主題 有時候同一個項目下我們可能會使用多個窗體,窗體間方法互相調用也不可避免,好了,使用無參無返回值的方法,開始上圖 1、新建一個winform項目Form1,並再添加一個窗體Form2;拖入button和textbox,如下 2、先編輯Form2,定義屬性存放無參無返回值的方法,重載For ...
  • 今天在使用 C# 操作 Excel 時,一直在報錯誤: 檢索 COM 類工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的組件失敗,原因是出現以下錯誤: 8007065e 這個類型的數據不受支持。 (異常來自 HRESULT:0x8007065E ...
  • 一個字元串就是一個string類型數據,此類型變數我們可以把它看作一個只讀數組,其元素是char變數,在這裡我們來說下string類型的常用命令。 1、TocharArray():將此實例中的字元複製到 Unicode 字元數組。其示例是“char[] ch = <string類型變數>.ToCha ...
  • 因項目原因,需要使用SQLite的全文索引,用到了最新的fts5模塊 但在咱們.net framwork中卻會提示“SQL logic error no such module: fts5”:找不到fts5模塊…… 百度了很久都沒有找到項目解決方案,可能是C#用SQLite比較少的原因,更何況用的更 ...
  • https://3gstudent.github.io/3gstudent.github.io/Exchange-Web-Service(EWS)%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/ EWS是郵箱的一個開放的介面服務,可以取到郵箱的各種信息,郵件收發、會議、日期 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...