ASP.NET Web API简单学习

Web API 简介

Web API可以返回 json、xml类型的数据,对于数据的增删改查,提供了对应的资源操作,按照要求的类型进行处理,主要包括:Get(查),Post(增),Put(改),Delete(删),这些都是Http协议支持的请求方式。

             

Web API的请求方式:根据路由规则请求 。

WebService 和 Web API两种Web服务的比较:

WebService基于SOAP风格的网络服务,使用方法进行请求
Web API基于REST风格的网络服务,使用资源进行请求

Web API 中5个方法分别是查单个、查所有、增加、修改、删除。 

微软有了WebService和WCF为什么还要Web API?

用过WCF的人应该都清楚,面对一大堆复杂的配置文件,万一出了问题,真的会叫人抓狂,而且不同的客户端调用的也不是很方便。不得不承认WCF的功能确实是很强大,可是有时候我们不需要那么复杂的功能,只需要简单的仅通过使用HTTP或者HTTPS来调用增删改查,这时候,Web API就应运而生了。那么什么时候考虑使用WebAPI呢?

需要WebService但是不需要SOAP
需要在已有的WCF服务基础上建立non-soap-based http服务
只想发布一些简单的HTTP服务,不想使用相对复杂的WCF配置
发布的服务可能会被带宽受限的设备访问
希望使用开源框架,关键时候可以自己调试或者定义一下框架

 

创建 WebAPI 

首先新建一个WebAPI项目:

建完以后的目录结构是这样的:

                                                 

 

在Models目录中新建类 Product,代码如下图所示:

    public class Product{public int id { get; set; }public string Name { get; set; }public string Category { get; set; }public decimal Price { get; set; }}

在Controller文件夹下添加控制器, 注意要选择Web API 控制器,如下图所示:

Controller中默认示例化了一个Product类并添加了一些初始化的数据,实际情况要从数据库取数据,如下图所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web.Http;
using WebApplication1.Models;namespace WebApplication1.Controllers
{public class ProductsController : ApiController{List<Product> products = new List<Product>{new Product { id = 1,Name = "Tomato Soup",Category = "Grocerices",Price = 1},new Product { id = 2,Name = "Yo-yo",Category = "Toys",Price = 3.75M},new Product { id = 3,Name  = "Hammer",Category = "Hardware",Price = 16.99M}};[HttpGet]public IHttpActionResult GetAllProducts() => Json<List<Product>>(products);[HttpGet]public IHttpActionResult GetProduct(int id) => Json<Product>(products.FirstOrDefault(p => p.id == id));[HttpPost]public IHttpActionResult PostProduct(Product proudct){products.Add(proudct);return Json<List<Product>>(products);}[HttpPut]public IHttpActionResult PutProduct(Product product){var pro = products.FirstOrDefault(p => p.id == product.id);pro.Name = product.Name;pro.Category = product.Category;pro.Price = product.Price;return Json<Product>(pro);}[HttpDelete]public IHttpActionResult DeleteProduct(int id){products.RemoveAt(id);return Json<List<Product>>(products);}}
}

修改index.cshtml页面,去掉默认的代码,添加如下代码,用于测试Web API:


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Product App</title>
</head>
<body><div><h2>All Product</h2><ul id="products"></ul></div><div><h2>Search by ID</h2><input type="text" id="prodId" size="5"/><input  type="button" value="Search" onclick="find()"/><p id="product"></p></div><div><h3>Add Product</h3>id <input  id="id" type="text"/><br />Name:<input id="name" type="text" /><br />Category:<input id="category" type="text" /><br />Price:<input id="price" type="text" /><br /><input type="button" value="AddP" onclick="Add()"/></div><div><h3>update Product</h3>id <input id="up_id" type="text" /><br />Name:<input id="up_name" type="text" /><br />Category:<input id="up_category" type="text" /><br />Price:<input id="up_price" type="text" /><br /><input type="button" value="UpdataP" onclick="update()" /></div><div><h3>delete Product</h3>id <input id="delete_id" type="text"/><br /><input type="button" value="DeleteP" onclick="deletep()" /></div>
</body>
</html>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">var url = "api/products";//用于保存用户输入数据var Product = {create: function () {Id: "";Name: "";Category: "";Price: "";return Product;}}$(document).ready(function () {$.getJSON(url).done(function (data) {$.each(data, function (key, item) {$('<li>', { text: formatItem(item) }).appendTo($('#products'));})})});function formatItem(item){return item.Name + ': $' + item.Price;}function find(){var id = $('#prodId').val();$.getJSON(url + '/' + id).done(function (data) {$('#product').text(formatItem(data));}).fail(function (jqXHR, textStatus, err) {$('#product').text('Error:' + err);});}function Add(){var newProduct = Product.create();newProduct.Id = $("#id").val();newProduct.Price = $("#price").val();newProduct.Name = $("#name").val();newProduct.Category = $("#category").val();$.ajax({url: "/api/Products",type: "POST",contentType: "application/json; charset=utf-8",data: JSON.stringify(newProduct),success: function (data) {$('ul li').remove()$.each(data, function (key, item) {$('<li>', { text: formatItem(item) }).appendTo($('#products'));})},error: function (XMLHttpRequest, textStatus, errorThrown) {alert("请求失败,消息:" + textStatus + "  " + errorThrown);}});}function update(){var newProduct = Product.create();newProduct.Id = $("#up_id").val();newProduct.Price = $("#up_price").val();newProduct.Name = $("#up_name").val();newProduct.Category = $("#up_category").val();$.ajax({url: "/api/Products",type: "PUT",contentType: "application/json; charset=utf-8",data: JSON.stringify(newProduct),success: function (data) {$('#product').text(formatItem(data));},error: function (XMLHttpRequest, textStatus, errorThrown) {alert("请求失败,消息:" + textStatus + "  " + errorThrown);}});}function deletep(){$.ajax({url: "/api/Products",type: "DELETE",contentType: "application/json; charset=utf-8",data: { "id": $("#delete_id").val() },success: function (data) {$('ul li').remove()$.each(data, function (key, item) {$('<li>', { text: formatItem(item) }).appendTo($('#products'));})},error: function (XMLHttpRequest, textStatus, errorThrown) {alert("请求失败,消息:" + textStatus + "  " + errorThrown);}});}
</script>

运行以后即可测试,框架会自动根据不同类型的http请求去寻找control中对应的方法,测试页面如下图所示:

              

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用NCO 3.0 调用SAP中的函数

简介 .Net Connector 3.0&#xff0c;简称 Nco3.0。Nco3.0 是 SAP 针对 .net 平台提供的编程接口&#xff0c;由 Nco1.0/Nco2.0 演变而来。如果使用 .net 平台编程&#xff0c;推荐使用 NCo3.0。3.0 版与之前1.0/2.0 版本比较&#xff0c;不管是 API 还是架构&#xff0c;都重新…

char与varchar区别(MYISAM)

Char属于固定长度的字符类型&#xff0c;而varchar属于可变长的字符类型。 下表将各种字符串值保存到char(4)和varchar&#xff08;4&#xff09;列后的结果&#xff0c;说明了char和varchar之间的差别 值 Char(4) 存储需求 Varchar (4) 存储需求 ‘’ ‘ ’ 4字符节…

Win10系统局域网中的其他电脑能Ping通但是无法访问本地IIS发布的网站

局域网中的其他电脑无法访问本地IIS发布的网站&#xff0c;但是能ping通&#xff0c;基本是由于没开放端口的原因。 打开防火墙 —— 高级设置&#xff1a; 点击“入站规则”&#xff0c;然后是“新建规则”&#xff1a; 然后选择“端口” &#xff1a; 选择“TCP”&#xff0c…

C#调试WebService

简单调试 1、首先&#xff0c;新建一个WebService项目用于测试&#xff0c;如下图所示&#xff1a; 2、项目会默认生成一个Hello方法&#xff0c;但是由于Hello方法太简单&#xff0c;添加一个Add方法用于计算两个整数之和&#xff0c;如下图所示&#xff1a; [WebMethod]publ…

ArchLinux学习之环境变量

2019独角兽企业重金招聘Python工程师标准>>> 使得刚修改的环境变量生效&#xff1a;source <带环境变量的文件> 查看环境变量&#xff1a; env 或 set 持久化的环境变量主要存在于这几个文件中&#xff1a; /etc/profile/etc/environment~/.bash_profile~/.b…

精通ASP.NET MVC ——属性路由

在上一篇文章中&#xff0c;有约定路由的介绍。MVC 5中增加了对属性路由这一新技术的支持。在属性路由中&#xff0c;路由是由直接运用于控制器的C#属性定义的。 启动和运用属性路由 默认情况下属性路由是禁止的&#xff0c;通过MapMvcAttributeRoutes扩展方法可以启用它。该…

ASP.NET MVC 阻止通过URL访问服务器上的静态资源文件

背景 在默认情况下&#xff0c;MVC框架是支持对服务器静态资源的访问的&#xff0c;我们在项目根目录下新建一个Content文件夹&#xff0c;然后添加一个命名为“StaticContent.html”的html文件&#xff0c;如下图所示&#xff1a; StaticContent.html中的代码如下图所示&…

精通ASP.NET MVC——控制器和动作

在MVC框架中&#xff0c;控制器必须实现System.Web.Mvc命名空间的IController接口&#xff0c;如下图所示&#xff1a; //// 摘要:// 定义控制器所需的方法。public interface IController{//// 摘要:// 执行指定的请求上下文。//// 参数:// requestContext:// 请…

精通ASP.NET MVC ——视图

文章非常长&#xff0c;仅仅用于记录自己学习。 创建自定义视图引擎 创建自定义视图引擎的价值是&#xff0c;演示请求处理管道如何工作&#xff0c;并完善关于MVC架构如何操作的知识&#xff0c;视图引擎实现IViewEngine接口&#xff0c;如下图所示&#xff1a; public inte…

使用列表选择框控件

本例使用列表选择框控件,并向其中添加删除列表项&#xff0c;程序运行如下图所示。 程序代码如下。 using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace eg38_checklistBoxApp {public partial class Form1 : Form…

精通ASP.NET MVC ——辅助器方法

辅助器方法(Helper Method)&#xff0c;其作用是对代码块和标记进行打包&#xff0c;以便能够在整个MVC框架应用程序中重用。 首先新建一个项目&#xff0c;添加一个Home控制器&#xff0c;如下图所示&#xff1a; public class HomeController : Controller{// GET: Homepubli…

精通ASP.NET MVC ——模型绑定

模型绑定&#xff08;Model Binding&#xff09;是指&#xff0c;用浏览器以Http请求方式发送的数据来创建.Net对象的过程。 准备示例项目 新建一个空的MVC项目&#xff0c;名叫MvcModels&#xff0c;接下去会以此项目来演示各种功能。 在Models文件夹中创建一个Person.cs类…

精通ASP.NET MVC ——模型验证

文章内容较长&#xff0c;用于记录自己学习。模型验证&#xff08;Model Vaildation&#xff09;是确保应用程序所接受的数据适合于绑定到模型&#xff0c;并且在不合适时给用户提供有用的信息&#xff0c;以帮助他们修正问题的过程。 准备示例项目 新建一个空的MVC项目&…

[wbia 2.2] 对检索结果进行评估

评估对检索系统的性能&#xff1a; 由于我们这里的检索结果&#xff0c;是主要根据PageRank的排名&#xff0c;以及Lucene对文本的分词和相关性计算的最后得分&#xff0c;进行权值调整后得到的排名结果。 这里对我们检索系统的进行性能评估&#xff0c;这里主要评估的是检索结…

错误175:具有固定名称MySql.Data.MySqlClient的ADO.NET提供程序未在计算机或者应用程序配置文件中注册或者无法加载

背景&#xff1a; EF连接MySQL时报错&#xff0c;截图如下图所示&#xff1a; 网上翻阅了很多资料&#xff0c;感觉有一篇文章说的比较靠谱&#xff1a;点击阅读。解决问题的大致过程如下&#xff1a; 在尝试使用MySQL&#xff0c;ADO.NET&#xff08;数据库优先&#xff09;和…

精通ASP.NET MVC ——URL和Ajax辅助器方法

Ajax(或者&#xff0c;如果你愿意&#xff0c;也可以称为AJAX)是 Asynchronous JavaScripts and XML(异步JavaScripts与XML)。其XML部分并不如它往常那样意义重大&#xff0c;但是异步部分却使AJax十分有用。这是后台请求服务器数据&#xff0c;而不必重载Web页面的一种模型。M…

精通ASP.NET MVC ——控制器可扩展性

MVC中引导动作方法执行过程的请求流程管道中&#xff0c;有两个重要的部件&#xff1a;控制器工厂(Controller Factory) 和 动作调用器&#xff08;Action Invoker&#xff09;。控制器工厂负责创建对请求进行服务的控制器实例&#xff0c;动作调用器负责查找并调用控制器类中的…

永中向香港博览会主办方演示云办公(转载)

4月16号“香港国际资讯博览会”主办方香港贸发局对永中云办公产品非常感兴趣&#xff0c;由永中员工演示&#xff0c;并拍摄了演示视频。转载于:https://blog.51cto.com/premium/837675

Backbone.js学习笔记

为什么80%的码农都做不了架构师&#xff1f;>>> http://documentcloud.github.com/backbone var todoItem new TodoItem(); todoItem.url /todo; todoItem.fetch(); todoItem.get(description)var TodoItem Backbone.Model.extend({urlRoot: /todos }); var tod…

ASP.NET MVC中使用Autofac实现简单依赖注入

本文参考资料&#xff1a; 1、https://www.cnblogs.com/RayWang/p/11128554.html。 2、https://www.cnblogs.com/eedc/p/6127181.html 3、https://www.cnblogs.com/ancupofcoffee/p/5007649.html#top 前言 关于IoC和DI(依赖注入)的概念网上一搜一大把。简单来说&#xff0c;Io…