HttpClient如何調(diào)用ASP.NET Web API?這個(gè)問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個(gè)問題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!
創(chuàng)新互聯(lián)2013年至今,先為丹徒等服務(wù)建站,丹徒等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為丹徒企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
通過JQuery和Ajax對(duì)Web API進(jìn)行數(shù)據(jù)操作。這一篇我們來(lái)介紹一下使用HttpClient的方式來(lái)對(duì)Web API進(jìn)行數(shù)據(jù)操作。
這里我們還是繼續(xù)使用對(duì)Product的操作實(shí)例來(lái)演示一下它的基本應(yīng)用。
創(chuàng)建ASP.NET Web API應(yīng)用程序
在VS中選擇創(chuàng)建一個(gè)ASP.NET Web Application應(yīng)用程序,在向?qū)У南乱粋€(gè)窗口中選擇Web API模板。
創(chuàng)建Model
這里我們?cè)贛odels文件夾下創(chuàng)建一個(gè)簡(jiǎn)單的Product model類,用來(lái)傳遞數(shù)據(jù)。
在Models文件夾上點(diǎn)擊右鍵,選擇Add -> Class
public class Product { public int ProductID { get; set; } public string ProductName { get; set; } public decimal Price { get; set; } public int Count { get; set; } public string Description { get; set; } }
創(chuàng)建Cotroller
接著在Controllers文件夾下創(chuàng)建一個(gè)API Controller, 命名為"ProductsController"。
在Controllers文件夾上點(diǎn)擊右鍵,選擇Add -> Controller ,在彈出向?qū)е羞x擇Web API 2 Controller - Empty
在向?qū)乱徊街休斎階PI Controller name為"ProductsController"。
因?yàn)槲覀冃枰ㄟ^HttpClient的方式來(lái)調(diào)用Web API,所以這里我們還需要?jiǎng)?chuàng)建一個(gè)MVC Controller。
同樣在Controllers文件夾上點(diǎn)擊右鍵,選擇Add -> Controller ,在彈出向?qū)е羞x擇MVC 5 Controller - Empty
在向?qū)乱徊街休斎隡VC 5 Controller name為"ProductController"。
創(chuàng)建Web API方法(CRUD)
這里我們依然使用模擬的數(shù)據(jù)創(chuàng)建簡(jiǎn)單的CRUD Web API方法。前面的章節(jié)有詳細(xì)講解到,這里就不細(xì)說了。直接上代碼。
public class ProductsController : ApiController { // Mock product list public static List<Product> productList = initProductMockDataList(); private static List<Product> initProductMockDataList() { return new List<Product>() { new Product {ProductID=1,ProductName="Product A",Price=1000000,Count=5,Description="Description A"}, new Product {ProductID=2,ProductName="Product B",Price=200000,Count=2,Description="Description B"}, new Product {ProductID=3,ProductName="Product C",Price=500000,Count=8,Description="Description C"}, new Product {ProductID=4,ProductName="Product D",Price=80000,Count=10,Description="Description D"}, new Product {ProductID=5,ProductName="Product E",Price=300000,Count=3,Description="Description E"} }; } public IEnumerable<Product> Get() { return productList; } public Product Get(int id) { return productList.Where(p => p.ProductID == id).FirstOrDefault(); } public void Post([FromBody]Product product) { var lastProduct = productList.OrderByDescending(p => p.ProductID).FirstOrDefault(); int newProductID = lastProduct.ProductID + 1; product.ProductID = newProductID; productList.Add(product); } public void Put([FromBody]Product product) { var currentProduct = productList.Where(p => p.ProductID == product.ProductID).FirstOrDefault(); if (currentProduct != null) { foreach (var item in productList) { if (item.ProductID.Equals(currentProduct.ProductID)) { item.ProductName = product.ProductName; item.Price = product.Price; item.Count = product.Count; item.Description = product.Description; } } } } public void Delete(int id) { Product product = productList.Where(p => p.ProductID == id).FirstOrDefault(); productList.Remove(product); } }
通過JQuery和Ajax調(diào)用MVC Controller,在MVC Controller中通過HttpClient調(diào)用Web API
Web API中的(CRUD)方法創(chuàng)建完成,接下來(lái)我們就分別來(lái)看看對(duì)各個(gè)方法的數(shù)據(jù)操作。
1.獲取Product列表
打開我們創(chuàng)建好的MVC 5 Controller文件ProductController。使用HttpClient的方式來(lái)調(diào)用我們Web API中的列表方法。
首先需要引入System.Net.Http
using System.Net.Http;
接下來(lái)為我們的Web API地址定義一個(gè)公共靜態(tài)變量。
public static readonly Uri _baseAddress = new Uri("http://localhost:21853/"); // // GET: /Product/ public ActionResult Index() { return View(); } public JsonResult GetProductList() { List<Product> productList = null; Uri address = new Uri(_baseAddress, "/api/products"); using (var httpClient = new HttpClient()) { var response = httpClient.GetAsync(address).Result; if (response.IsSuccessStatusCode) productList = response.Content.ReadAsAsync<List<Product>>().Result; } return Json(productList, JsonRequestBehavior.AllowGet); }
這里我們需要通過點(diǎn)擊按鈕,通過Ajax調(diào)用來(lái)獲取Product列表數(shù)據(jù),所以這里我們使用JsonResult返回?cái)?shù)據(jù)。
接下來(lái),我們就來(lái)創(chuàng)建View。
文件夾Views->Product下創(chuàng)建一個(gè)View,名為"Index"。打開Index View,修改頁(yè)面代碼如下:
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript"></script> </head> <body> <p style="background-color: #008000; padding: 10px; margin: 5px; width: 45%;"> <p style="font-weight: bold; margin-bottom: 5px;">Get Product List</p> <p style="padding-bottom:5px;"><input id="btnGetProductList" name="btnGetProductList" type="button" value="Get Product List" /></p> <p id="products"></p> </p> </body> </html>
接著,我們要做的是,當(dāng)點(diǎn)擊Get Product List按鈕是加載Product List,代碼實(shí)現(xiàn)如下:
$('#btnGetProductList').click(function () { $.ajax({ url: '/Product/GetProductList', type: 'GET', dataType: 'json' }).success(function (result) { DisplayProductList(result); }).error(function (data) { alert(data); }); }); // Display product list function DisplayProductList(result) { var productTable = $("<table cellpadding='3' cellspacing='3'></table>"); var productTableTitle = $("<tr><th>Product ID</th><th>Product Name</th><th>Price</th><th>Count</th><th>Description</th></tr>"); productTableTitle.appendTo(productTable); for (var i = 0; i < result.length; i++) { var productTableContent = $("<tr><td>" + result[i].ProductID + "</td><td>" + result[i].ProductName + "</td><td>" + result[i].Price + "</td><td>" + result[i].Count + "</td><td>" + result[i].Description + "</td></tr>"); productTableContent.appendTo(productTable); } $('#products').html(productTable); }
好了,運(yùn)行代碼。
點(diǎn)擊Get Product List按鈕之前如下:
點(diǎn)擊Get Product List按鈕之后如下:
Product數(shù)據(jù)列表加載成功。
2.獲取單條Product數(shù)據(jù)
這里我們的做法是在搜索框里輸入Product ID,然后點(diǎn)擊Get Product按鈕,查找出這條Product信息。
首先,我們先完成在ProductController中使用HttpClient調(diào)用Web API中獲取單條Product數(shù)據(jù)的方法。
public JsonResult GetSingleProduct(int id) { Uri address = new Uri(_baseAddress, "/api/products/" + id); Product product = null; using (var httpClient = new HttpClient()) { var response = httpClient.GetAsync(address).Result; if (response.IsSuccessStatusCode) product = response.Content.ReadAsAsync<Product>().Result; } return Json(product, JsonRequestBehavior.AllowGet); }
接著,來(lái)到Index View頁(yè)面中添加一個(gè)搜索Product ID的textbox以及一個(gè)Get Product的按鈕。
<p style="background-color: #9ACD32; padding: 10px; margin: 5px; width: 45%; "> <p style="font-weight:bold;margin-bottom:5px;">Get Single Product</p> <p>Product ID: <input id="txtSearchProductID" name="txtSearchProductID" type="text" /> <input id="btnGetProduct" name="btnGetProduct" type="button" value="Get Prdouct" /></p> <p id="product"></p> </p>
為按鈕Get Product按鈕添加Ajax方法
$('#btnGetProduct').click(function () { if ($('#txtSearchProductID').val().trim() != "") { $.ajax({ url: '/Product/GetSingleProduct?id=' + $('#txtSearchProductID').val(), type: 'GET', dataType: 'json' }).success(function (result) { if (result != null) { $('#product').html("Product ID: " + result.ProductID + "<br/>" + "Product Name: " + result.ProductName + "<br/>" + "Count: " + result.Count + "<br/>" + "Price: " + result.Price + " <br/>" + "Description: " + result.Description); } else { $('#product').html(''); } }).error(function (data) { alert(data); }); } });
運(yùn)行程序,加載Product列表。
點(diǎn)擊Get Product按鈕前:
這里我們查找Product ID為1的數(shù)據(jù)
我們看到Product ID為1的數(shù)據(jù)成功獲取。
3.新增一條Product
這里我們創(chuàng)建4個(gè)textbox,用來(lái)輸入Product Name,Count,Price,Description的信息以及一個(gè)Create Product按鈕。
首先,我們先完成在ProductController中使用HttpClient調(diào)用Web API中新增一條Product數(shù)據(jù)的方法。
public JsonResult CreateProduct(Product product) { bool createSuccess = true; Uri address = new Uri(_baseAddress, "/api/products"); using(var httpClient=new HttpClient()) { var response = httpClient.PostAsJsonAsync(address, product).Result; if (!response.IsSuccessStatusCode) createSuccess = false; } return Json(createSuccess, JsonRequestBehavior.AllowGet); }
接著,來(lái)到Index View頁(yè)面中添加4個(gè)textbox用來(lái)輸入Product Name,Count,Price,Description的信息以及一個(gè)Create Product按鈕。
<p style="background-color: #CA5100; padding: 10px; margin: 5px; width: 45%;"> <p style="font-weight:bold;margin-bottom:5px;">Create Product</p> <p> <table> <tr><td> Product Name:</td><td><input id="txtCreateProductName" name="txtCreateProductName" type="text" /></td></tr> <tr><td>Count:</td><td><input id="txtCreateCount" name="txtCreateCount" type="text" /></td></tr> <tr><td> Price:</td><td><input id="txtCreatePrice" name="txtCreatePrice" type="text" /></td></tr> <tr><td> Description:</td><td><input id="txtCreateDescription" name="txtCreateDescription" type="text" /></td></tr> </table> </p> <p> <p id="createMessage" style="color:blue;"></p> <input id="btnCreateProduct" name="btnCreateProduct" type="button" value="Create Product" /> </p> </p>
為按鈕Create Produc按鈕t添加Ajax方法
$('#btnCreateProduct').click(function () { if ($('#txtCreateProductName').val().trim() != "" && $('#txtCreateCount').val().trim() != "" && $('#txtCreatePrice').val().trim() != "" && $('#txtCreateDescription').val().trim() != "") { var product = { ProductID: 0, ProductName: $('#txtCreateProductName').val(), Count: $('#txtCreateCount').val(), Price: $('#txtCreatePrice').val(), Description: $('#txtCreateDescription').val() }; $.ajax({ url: '/Product/CreateProduct', type: 'GET', data: product, dataType: 'json' }).success(function (result) { if (result != null && result) { $('#createMessage').html('Product create success.'); $("#btnGetProductList").trigger('click'); } }).error(function (data) { alert(data); }) } });
運(yùn)行程序,加載Product列表。
點(diǎn)擊Create Product按鈕之前:
輸入新增數(shù)據(jù),點(diǎn)擊Create Product按鈕之后:
我們看到新增數(shù)據(jù)成功并顯示到了Product列表中。
4.修改Product信息
這里我們創(chuàng)建5個(gè)textbox,用來(lái)輸入Product ID,Product Name,Count,Price,Description的信息以及一個(gè)Update Product按鈕。
首先,我們先完成在ProductController中使用HttpClient調(diào)用Web API中修改一條Product數(shù)據(jù)的方法。
public JsonResult UpdateProduct(Product product) { bool updateSuccess = true; Uri address = new Uri(_baseAddress, "/api/products"); using (var httpClient = new HttpClient()) { var response = httpClient.PutAsync<Product>(address, product, new JsonMediaTypeFormatter()).Result; if (!response.IsSuccessStatusCode) updateSuccess = false; } return Json(updateSuccess, JsonRequestBehavior.AllowGet); }
接著,來(lái)到Index View頁(yè)面中添加5個(gè)textbox用來(lái)輸入Product ID,Product Name,Count,Price,Description的信息以及一個(gè)Update Product按鈕。
<p style="background-color: #007ACC; padding: 10px; margin: 5px; width: 45%;"> <p style="font-weight:bold;margin-bottom:5px;">Update Product</p> <p> <table> <tr><td>Product ID:</td><td><input id="txtUpdateProductID" name="txtUpdateProductID" type="text" /></td></tr> <tr><td> Product Name:</td><td><input id="txtUpdateProductName" name="txtUpdateProductName" type="text" /></td></tr> <tr><td>Count:</td><td><input id="txtUpdateCount" name="txtUpdateCount" type="text" /></td></tr> <tr><td> Price:</td><td><input id="txtUpdatePrice" name="txtUpdatePrice" type="text" /></td></tr> <tr><td> Description:</td><td><input id="txtUpdateDescription" name="txtUpdateDescription" type="text" /></td></tr> </table> </p> <p> <p id="updateMessage" style="color:white;"></p> <input id="btnUpdateProduct" name="btnUpdateProduct" type="button" value="Update Product" /> </p> </p>
為按鈕Update Product按鈕添加Ajax方法
$('#btnUpdateProduct').click(function () { if ($('#txtUpdateProductID').val().trim() != "" && $('#txtUpdateProductName').val().trim() != "" && $('#txtUpdateCount').val().trim() != "" && $('#txtUpdatePrice').val().trim() != null && $('#txtUpdateDescription').val().trim() != "") { var product = { ProductID: $('#txtUpdateProductID').val(), ProductName: $('#txtUpdateProductName').val(), Count: $('#txtUpdateCount').val(), Price: $('#txtUpdatePrice').val(), Description: $('#txtUpdateDescription').val() }; $.ajax({ url: '/Product/UpdateProduct', type: 'GET', data: product, dataType: 'json' }).success(function (result) { if (result != null && result) { $('#updateMessage').html('Product update success.'); $('#btnGetProductList').trigger('click'); } }).error(function (data) { alert(data); }) } });
運(yùn)行代碼,加載Product列表。
點(diǎn)擊Update Create按鈕之前:
這里我們修改第一條數(shù)據(jù),輸入修改信息,點(diǎn)擊Update Product按鈕之后:
我們看到Product ID為1的信息成功修改并顯示到了Product列表中。
5.刪除Product
這里我們創(chuàng)建1個(gè)textbox,用來(lái)輸入Product ID的信息以及一個(gè)Delete Product按鈕。
首先,我們先完成在ProductController中使用HttpClient調(diào)用Web API中刪除一條Product數(shù)據(jù)的方法。
public JsonResult DeleteProduct(int id) { bool deleteSuccess = true; Uri address = new Uri(_baseAddress, "/api/products/" + id); using (var httpClient = new HttpClient()) { var response = httpClient.DeleteAsync(address).Result; if (!response.IsSuccessStatusCode) deleteSuccess = false; } return Json(deleteSuccess, JsonRequestBehavior.AllowGet); }
接著,來(lái)到Index View頁(yè)面中添加1個(gè)textbox用來(lái)輸入Product ID的信息以及一個(gè)Delete Product按鈕。
<p style="background-color: #B572BA; padding: 10px; margin: 5px; width: 45%; "> <p style="font-weight:bold;margin-bottom:5px;">Delete Product</p> <p>Product ID: <input id="txtDeleteProductID" name="txtDeleteProductID" type="text" /> <input id="btnDeleteProduct" name="btnDeleteProduct" type="button" value="Delete Prdouct" /></p> <p id="deleteMessage" style="color:blue;"></p> </p>
為按鈕Delete Product按鈕添加Ajax方法
$('#btnDeleteProduct').click(function () { if ($('#txtDeleteProductID').val().trim() != "") { $.ajax({ url: '/Product/DeleteProduct?id=' + $('#txtDeleteProductID').val(), type: 'GET', dataType: 'json' }).success(function (result) { if (result != null && result) { $('#deleteMessage').html('Product delete success.'); $('#btnGetProductList').trigger('click'); } }).error(function (data) { alert(data); }) } });
運(yùn)行代碼,加載Product列表。
點(diǎn)擊Delete Product按鈕之前。
這里我們輸入Product ID為1的數(shù)據(jù),點(diǎn)擊Delete Product按鈕之后:
我們看到Product ID為1的數(shù)據(jù)成功刪除,并且Product列表中也沒有了這條數(shù)據(jù)。
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)HttpClient如何調(diào)用ASP.NET Web API大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章標(biāo)題:HttpClient如何調(diào)用ASP.NETWebAPI
鏈接地址:http://jinyejixie.com/article46/iicgeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、定制網(wǎng)站、關(guān)鍵詞優(yōu)化、網(wǎng)站內(nèi)鏈、網(wǎng)站維護(hù)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)