webapi简介

在asp.net中,创建一个HTTP服务,有很多方案,以前用ashx,一般处理程序(HttpHandler),现在可以用webapi

微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码可读性强的,上手快的,如果要拿它和web服务相比,我会说,它的接口更标准,更清晰,没有混乱的方法名称,有的只有几种标准的请求,如get,post,put,delete等,它们分别对应的几个操作,下面讲一下:

GET:获取

POST:添加

PUT:修改

DELETE:删除

注意上面公开的API接口都是在XMLHttpRequest情况下调用的,当然你可以使用jquery的ajax组件来完成这个请求调用,它的代码更加面向对象,下面会举例说明。

WebAPI是根据请求头信息(Accept Header)来查找已经格式化注册的响应头信息(Content-Type)来确定它应该返回的输出类型json/xml,浏览器访问基本都是xml,如果只需要json的话可以通过Global.asax设置

protected void Application_Start(object sender, EventArgs e)
{//默认JSON
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}

webapi示例(CRUD)

环境:vs2015、iis7、webapi2.0、.net4.5.2

功能:webapi+ajax实现增删改查

模型

namespace cms.Model
{public partial class student
{
public int ID { get; set; }
public string name { get; set; }
public int sex { get; set; }
public int age { get; set; }
public System.DateTime timesAdd { get; set; }
}
}

修改webapi路由

webapi默认路由api/{controller}/{id},如果不喜欢可以修改为api/{controller}/{action}/{id},下边是修改后的代码

public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}

 Controller代码

using System;
using System.Collections.Generic;
using System.Net;
using System.Web.Http;
using cms.BLL;
using cms.Model;
namespace cms.Web.API
{
public class StudentController : ApiController
{
public studentBLL bll = new studentBLL();
// GET: /api/student/GetList
public IEnumerable<student> GetList()
{
var list = bll.FindList();
return list;
} // GET: api/Student/Get/5
public student Get(int id)
{
var model = bll.Find(id);
if (model == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return model;
}
//添加方法1:如果要添加的字段和模型刚好匹配就用这个
// POST: api/Student/Post
public student Post([FromBody]student entity)
{
entity.timesAdd = DateTime.Now;
return bll.Add(entity); //dynamic data = new { name = _name, age = _age };
//return Json<dynamic>(data);
}
//添加方法2:如果要添加的字段和模型不匹配就用这个
// POST: api/Student/PostAdd
//注意:webapi post接受数据dynamic,ajax调用时也得把json格式化为字符串才行
public student PostAdd(dynamic obj)
{
student model = new student();
model.name = obj.name;
model.sex = obj.sex;
model.age = obj.age;
model.timesAdd = DateTime.Now;
return bll.Add(model);
} // PUT: api/Student/Put/5
public void Put(int id, [FromBody]student entity)
{
student model = bll.Find(id);
model.name = entity.name;
model.sex = entity.sex;
model.age = entity.age;
if (!bll.Update(model))
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
} // DELETE: api/Student/Delete/5
public void Delete(int id)
{
if (!bll.Delete(id))
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
}
}
}

html代码

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>webapi教程</title>
<script type="text/javascript" src="Scripts/jquery-1.8.2.js"></script>
<style type="text/css">
h2 {
border-bottom: solid 1px #ccc;
padding-bottom: 10px;
} #box_list span {
margin-right: 30px;
width: 100px;
display: inline-block;
} .time {
width: 200px !important;
}
</style>
</head>
<body>
<h2>webapi create</h2>
<div>
<p><input type="hidden" id="iid" /></p>
<p>姓名:<input type="text" id="name" /></p>
<p>性别:<input type="text" id="sex" /></p>
<p>年龄:<input type="text" id="age" /></p>
<p><input type="button" id="btnAdd" value="添加" />
<input type="button" id="btnAdd2" value="添加2" />
<input type="button" id="btnEdit" value="修改" /></p>
</div> <h2>webapi list</h2>
<div id="box_list"></div>
<div>
<input type="button" id="btnDel" value="删除" />
<input type="button" id="btnView" value="查看" />
</div>
<div id="box_view"></div>
<script type="text/javascript">
$(function () {
GetList();
$("#btnAdd").click(function () {
var _data = { name: $("#name").val(), sex: $("#sex").val(), age: $("#age").val() };
$.ajax({
type: "post",
url: "/api/Student/Post",
data: _data,
dataType: "json",
success: function (data) {
alert("添加成功");
GetList();
},
error: function () {
alert("添加失败");
}
});
})
$("#btnAdd2").click(function () {
var _data = JSON.stringify({ name: $("#name").val(), sex: $("#sex").val(), age: $("#age").val() });
$.ajax({
type: "post",
url: "/api/Student/PostAdd",
data: _data,
dataType: "json",
contentType: 'application/json',
success: function (data) {
alert("添加成功");
GetList();
},
error: function () {
alert("添加失败");
}
});
})
$("#btnDel").click(function () {
var _iid = $('input:radio[name=iid]:checked').val();;
$.ajax({
type: "Delete",
url: "/api/Student/Delete/" + _iid,
success: function (data) {
alert("删除成功");
$('input:radio[name=iid]:checked').parents("p").remove();
},
error: function () {
alert("删除失败");
}
});
})
$("#btnView").click(function () {
var _iid = $('input:radio[name=iid]:checked').val();;
$.ajax({
type: "get",
url: "/api/Student/get/" + _iid,
dataType: "json",
success: function (data) {
name: $("#iid").val(data.ID);
name: $("#name").val(data.name);
sex: $("#sex").val(data.sex);
age: $("#age").val(data.age)
},
error: function () {
alert("获取失败");
}
});
})
$("#btnEdit").click(function () {
var _data = { name: $("#name").val(), sex: $("#sex").val(), age: $("#age").val() };
$.ajax({
type: "put",
url: "/api/Student/Put/" + $("#iid").val(),
data: _data,
success: function (data) {
alert("修改成功");
GetList();
},
error: function () {
alert("修改失败");
}
});
})
})
function GetList()
{
$("#box_list").html("");
$.ajax({
type: "GET",
url: "/api/student/GetList",
dataType: "json",
success: function (data) {
$.each(data, function (i, item) {
$("#box_list").append("<p><span><input type='radio' name='iid' value='" + item.ID + "' />" + item.ID + "</span><span>" + item.name + "</span><span>" + item.sex + "</span><span>" + item.age + "</span><span class='time'>" + item.timesAdd + "</span></p>")
});
}
});
}
</script>
</body>
</html>

效果图

常见问题:

如果在做修改和删除操作时报错误(webapi delete Method Not Allowed),说明是iis把put和delete请求禁止了,需要在web.config中设置一下就ok了

<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>

Asp.Net WebApi学习教程之增删改查的更多相关文章

  1. ASP.NET从零开始学习EF的增删改查

           ASP.NET从零开始学习EF的增删改查           最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...

  2. http://www.cnblogs.com/nangong/p/db29669e2c6d72fb3d0da947280aa1ce.htm ASP.NET从零开始学习EF的增删改查

    http://www.cnblogs.com/nangong/p/db29669e2c6d72fb3d0da947280aa1ce.htmlASP.NET从零开始学习EF的增删改查

  3. Asp.net WebApi 项目示例(增删改查)

    1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET ...

  4. 【转载】ASP.NET MVC Web API 学习笔记---联系人增删改查

    本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查.目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的.下面我们通过创建一个简单的Web API来管理联系 ...

  5. ASP.NET MVC Web API 学习笔记---联系人增删改查

    本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查. 目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的. 下面我们通过创建一个简单的Web API来管理 ...

  6. abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之一(二十七)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  7. 前端使用AngularJS的$resource,后端ASP.NET Web API,实现增删改查

    AngularJS中的$resource服务相比$http服务更适合与RESTful服务进行交互.本篇后端使用ASP.NET Web API, 前端使用$resource,实现增删改查. 本系列包括: ...

  8. 使用HttpClient对ASP.NET Web API服务实现增删改查

    本篇体验使用HttpClient对ASP.NET Web API服务实现增删改查. 创建ASP.NET Web API项目 新建项目,选择"ASP.NET MVC 4 Web应用程序&quo ...

  9. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

随机推荐

  1. 全排列-hdu1716

    题目描述: 题目意思很简单,就是要我们输出全排列后的数据组成,但是要注意组成的数据是一个实数,并且千位数字相同的处在同一行中. 代码实现: #include<stdio.h> #inclu ...

  2. 2n皇后问题【dfs】

    <题目链接> 题目描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后 ...

  3. js数据结构之集合的详细实现方法

    数据结构中的集合,类似于数学中常说的集合,是一类数据的群组.集合与集合之间还存在交集,并集,补集的运算. ***集合为无序,集合内元素不重复 ***js的set基于数组, 使用SetClass为类名, ...

  4. 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-5 random direction & ONB

     Preface 往后看了几章,对这本书有了新的理解 上一篇,我们第一次尝试把MC积分运用到了Lambertian材质中,当然,第一次尝试是失败的,作者发现它的渲染效果和现实有些出入,所以结尾处声明要 ...

  5. loj#2574. 「TJOI2018」智力竞赛 (路径覆盖)

    目录 题目链接 题解 代码 题目链接 loj#2574. 「TJOI2018」智力竞赛 题解 就是求可重路径覆盖之后最大化剩余点的最小权值 二分答案后就是一个可重复路径覆盖 处理出可达点做二分图匹配就 ...

  6. bzoj3693: 圆桌会议 二分图 hall定理

    目录 题目链接 题解 代码 题目链接 bzoj3693: 圆桌会议 题解 对与每个人构建二分,问题化为时候有一个匹配取了所有的人 Hall定理--对于任意的二分图G,G的两个部分为X={x1,x2,- ...

  7. Java并发程序设计(十三)锁的性能优化

    锁的性能优化 一.优化注意事件 一)减少锁的持有时间 只在必要时进行同步,能明显减少锁的持有时间. 二)锁的细化 缺陷:当系统需要全局锁时,其消耗的资源会比较多. 三)锁的分离 比如读写分离锁 四)锁 ...

  8. bootsrap中的输入框demo1

    <!doctype html><html > <head> <meta charset="utf-8"> <link rel= ...

  9. C++有关 const & 内敛 & 友元&静态成员那些事

    C++中有关 const & 内敛 & 友元&静态成员 的用法比较杂乱,算是C++中一个麻烦的部分.现速速的对它们做大致的总结,了解它们当中常见的用法和陷阱. const修饰的 ...

  10. [原创]zabbix工具介绍,安装及使用

    [原创]zabbix工具介绍,安装及使用 http://waringid.blog.51cto.com/65148/955939/