ASP.NET Web API 学习 二

Technorati 标记: ASP.NET Web API

既然是 Web API,那么就会有不同的请求。 Http 的基本请求方法如下:

GET     请求获取Request-URI所标识的资源
POST    在Request-URI所标识的资源后附加新的数据
PUT     请求服务器存储一个资源,并用Request-URI作为其标识
DELETE  请求服务器删除Request-URI所标识的资源

以上4种方法,基本对应查询、新增、更新、删除 4种操作。

查询:

1)无参数:

public IEnumerable<Models.Employee> GetAllEmployees()
{
        var list = new List<Models.Employee>();
        using (var context = new NORTHWINDEntities())
        {
            list = AutoMapper.Mapper.Map<System.Data.Entity.DbSet<DataAccess.Employee>, List<Models.Employee>>(context.Employees);
        }
        return list.ToArray();
}

2)有参数:

public IEnumerable<Models.Employee> GetById(int id)
 {
        var list = new List<Models.Employee>();
        using (var context = new NORTHWINDEntities())
        {
            var queryList = context.Employees.Where(q => q.EmployeeID == id).ToList();
            list = AutoMapper.Mapper.Map<List<DataAccess.Employee>, List<Models.Employee>>(queryList);
        }
        return list.ToArray();
}

新增:

需要注意

1. [FromBody] 会告诉Web API 去Request 的Body 里取参数值,并且该属性在一个方法里只能出现一次

2. Post 如果提交的字段有多个值时,接收参数需要是一个Class

public Models.Employee Insert([FromBody]Models.Employee employee)
{
    Models.Employee newEmployee = null;
    DataAccess.Employee dtoEmployee = AutoMapper.Mapper.Map<Models.Employee, DataAccess.Employee>(employee);
    using (var context = new NORTHWINDEntities())
    {
        var newdto = context.Employees.Add(dtoEmployee);
        int id = context.SaveChanges();
        newEmployee = AutoMapper.Mapper.Map<DataAccess.Employee, Models.Employee>(newdto);
    }
    return newEmployee;
}

更新:

public Models.Employee Put([FromBody]Models.Employee employee)
{
    Models.Employee updateEmployee = null;
    using (var context = new NORTHWINDEntities())
    {
        var dtoEmployee = context.Employees.FirstOrDefault(q => q.EmployeeID == employee.EmployeeID);
        dtoEmployee.FirstName = employee.FirstName;
        dtoEmployee.LastName = employee.LastName;
        dtoEmployee.Title = employee.Title;
        context.SaveChanges();

        updateEmployee = AutoMapper.Mapper.Map<DataAccess.Employee, Models.Employee>(dtoEmployee);
    }
    return updateEmployee;
}

删除:

public void Delete(int id)
{
    using (var context = new NORTHWINDEntities())
    {
        var emp = context.Employees.FirstOrDefault(q => q.EmployeeID == id);
        context.Employees.Remove(emp);
        context.SaveChanges();
    }
}

前台页面调用代码:

<div id="body">
    <h3>Get All</h3>
    <input type="button" id="getAll" value="GetAll" />
    <div id="employeeAll">
    </div>

    <h3>Get by Id</h3>
    <input type="text" id="employeeId" />
    <input type="button" id="getById" value="GetById" />
    <div id="employeeById">
    </div>

    <h3>Add New Employee</h3>
    LastName:
    <input type="text" id="lastName" />
    FirstName:
    <input type="text" id="firstName" />
    Title:
    <input type="text" id="title" />
    <input type="button" id="insertEmployee" value="Insert" />
    <div id="newEmployee">
    </div>

    <h3>Update Employee</h3>
    Id:
    <input type="text" id="uId" />
    LastName:
    <input type="text" id="ulastName" />
    FirstName:
    <input type="text" id="ufirstName" />
    Title:
    <input type="text" id="utitle" />
    <input type="button" id="updateEmployee" value="Update" />
    <div id="updatedEmployee">
    </div>

    <h3>Delete by Id</h3>
    <input type="text" id="delId" />
    <input type="button" id="delById" value="Delete" />
    <div id="afterDel">
    </div>

    <input type="button" id="clearAll" value="Clear All" />

    <script src="~/Scripts/jquery-1.8.2.min.js"></script>
    <script type="text/ecmascript">
        $().ready(function () {
            //查询所有记录
            $("#getAll").click(function () {
                $.getJSON("/api/v1/Employees")
                    .done(function (data) {
                        var html = "<ul>";
                        $(data).each(function (i, item) {
                            html += "<li>" + item.EmployeeID + " | " + item.LastName + " " + item.FirstName + " | " + item.Title + "</li>";
                        });
                        html += "</ul>";
                        $("#employeeAll").html(html);
                    });
            });

            //带参数查询
            $("#getById").click(function () {
                var id = $("#employeeId").val();
                $.getJSON("/api/v1/Employees/" + id)
                    .done(function (data) {
                        var html = "<ul>";
                        $(data).each(function (i, item) {
                            html += "<li>" + item.EmployeeID + " | " + item.LastName + " " + item.FirstName + " | " + item.Title + "</li>";
                        });
                        html += "</ul>";
                        $("#employeeById").html(html);
                    });
            });

            //新增
            $("#insertEmployee").click(function () {
                var employee = { lastname: $("#lastName").val(), firstname: $("#firstName").val(), title: $("#title").val() };

                $.ajax({
                    type: "POST",
                    url: "/api/v1/Employees",
                    contentType: "application/json",
                    data: JSON.stringify(employee),
                    success: function (data) {
                        var html = "<ul>";
                        $(data).each(function (i, item) {
                            html += "<li>" + item.EmployeeID + " | " + item.LastName + " " + item.FirstName + " | " + item.Title + "</li>";
                        });
                        html += "</ul>";
                        $("#newEmployee").html(html);
                    },
                    complete: function (XMLHttpRequest, textStatus) {
                        //HideLoading();
                    },
                    error: function () {
                        //请求出错处理
                    }
                });

            });

            //更新
            $("#updateEmployee").click(function () {
                var employee = { employeeid: $("#uId").val(), lastname: $("#ulastName").val(), firstname: $("#ufirstName").val(), title: $("#utitle").val() };

                $.ajax({
                    type: "PUT",
                    url: "/api/v1/Employees",
                    contentType: "application/json",
                    data: JSON.stringify(employee),
                    success: function (data) {
                        var html = "<ul>";
                        $(data).each(function (i, item) {
                            html += "<li>" + item.EmployeeID + " | " + item.LastName + " " + item.FirstName + " | " + item.Title + "</li>";
                        });
                        html += "</ul>";
                        $("#updatedEmployee").html(html);
                    },
                    complete: function (XMLHttpRequest, textStatus) {
                        //HideLoading();
                    },
                    error: function () {
                        //请求出错处理
                    }
                });

            });

            //删除
            $("#delById").click(function () {
                var id = $("#delId").val();
                $.ajax({
                    type: "DELETE",
                    url: "/api/v1/Employees/" + id,
                    success: function (data) {
                        var html = "<ul>";
                        $(data).each(function (i, item) {
                            html += "<li>" + item.EmployeeID + " | " + item.LastName + " " + item.FirstName + " | " + item.Title + "</li>";
                        });
                        html += "</ul>";
                        $("#newEmployee").html(html);
                    },
                    complete: function (XMLHttpRequest, textStatus) {
                        //HideLoading();
                    },
                    error: function () {
                        //请求出错处理
                    }
                });
            });
        });
    </script>
</div>

终于完成了第二篇,以上代码完成了最常见的CRUD 操作。

作为一名苦逼的程序猿,谨以此记录成长路上的点点滴滴。

时间: 2024-08-28 04:55:04

ASP.NET Web API 学习 二的相关文章

ASP.NET Web API 学习【转】

转自:http://www.cnblogs.com/babycool/p/3922738.html 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现数据调用. 继续使用上一文章中的示例,添加一个index.html页面,添加对jquery的引用. 一.无参数Get请求 一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 来实现: 请求的后台Actio

ASP.NET Web API 学习 一

Technorati 标记: ASP.NET Web API   从参加工作开始就开始关注博客园,在园子里学到很多知识,看过很大大牛的文章,确从未发表过一个字.最近刚刚换了公司,学习Web API,就此开始我的第一篇文章吧,也作为学习的记录! 简介就不多介绍,说说我对ASP.NET Web API 的一点点理解. 不同于 Web Service.WCF, ASP.NET Web API 直接访问和处理 Http 请求和响应,在开发中,减少了很多工作,让人感觉一切是如此顺畅. 首先,创建一个 AS

ASP.NET Web API(二):安全验证之使用HTTP基本认证

在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API. 我们在接触了Web API的后就立马发现了有安全验证的需求,所以这篇文章我们先来讨论下安全验证一个最简单的方法:使用HTTP基本认证. HTTP基本认证原理 在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份认证的方法,当一个客户端向HTTP服务器进行数据请求时,如果客户端未被认证,则HTTP服务器

Asp.Net Web API(二)

创建一个Web API项目 第一步,创建以下项目 当然,你也可以创建一个Web API项目,利用 Web API模板,Web API模板使用 ASP.Net MVC提供API的帮助页. 添加Model 一个模型就是在你的应用程序中展示数据的一个对象.ASP.NET Web API 可以自动序列化你的模型到JSON,XML或一些其它格式,然后把已序列化的数据写入到HTTP响应消息的正文.只要客户端可以读取序列化的数据,那么它同样可以反序列这个对象.大多数的客户端都可以解析JSON或XML.此外,客

ASP.NET Web API学习 (一)

开发环境:win10,使用VS2015社区版和SQLSERVER2012开发 1.打开VS2015应用程序,点击左上角按钮:文件--新建--项目,弹出窗口中选择ASP.NET Web应用程序, 2.点击“确定”按钮,会再弹出一个窗口选择项目模板,VS2015会根据选择的模板自动创建项目文件夹并引入一些核心应用,如果你没有设计好项目文件的分配,建议使用模板.选择后点击“确定”按钮,VS会自动创建项目目录. 3.看一下自动生成的项目文件,主要分为App_Start,Areas,Content,Con

ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看另一种验证的方式:digest authentication,即摘要认证. 系列文章列表 ASP.NET Web API(一):使用初探,GET和POST数据ASP.NET Web API(二):安全验证之使用HTTP基本认证ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication) 摘要认证原理 在基本认证的方式中,主

Asp.Net Web API 2 官网菜鸟学习系列导航[持续更新中]

前言 本来一直参见于微软官网进行学习的, 官网网址http://www.asp.net/web-api.出于自己想锻炼一下学习阅读英文文章的目的,又可以学习下微软新发布的技术,其实也很久了,但自己菜鸟一枚,对自己来说都是新技术了.鉴于以上两个原因,本人打算借助google翻译和有道词典,来翻译学习这个系列,并通过博客园来记录自己的翻译学习过程.由于自己阅读水平的确太菜,在借助工具的情况下,有时候搞出来的也是蹩脚的语句,自己读着都难受,尤其是到了Web API路由的那两篇,所以自己想着是不是有别人

ASP.NET Web API 过滤器创建、执行过程(二)

前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器中,当然默认的基础服务也是有的,并且根据这些提供程序所获得的的过滤器信息集合进行排序.本篇就会对过滤器在创建完之后所做的一系列操作进行讲解. ASP.NET Web API 过滤器创建.执行过程(二) FilterGrouping过滤器分组类型 FilterGrouping类型是ApiController类型中的私有类型,它的作用就如同它的命名一样,用来对过

学习ASP.NET Web API框架揭秘之“HTTP方法重写”

最近在看老A的<ASP.NET Web API 框架揭秘>,这本书对于本人现阶段来说还是比较合适的(对于调用已经较为熟悉,用其开发过项目,但未深入理解过很多内容为何可以这样“调用”).看到第四章了,有些内容看着虽能理解,但未遇到过具体的问题,看起来也就没有豁然开朗之感.同时,有些内容是一眼就觉得“这是干货”,可能是之前遇到过某些问题,当时用一些搓办法解决,但现在看到书中的示例就如获至宝.所以,就挑些单独能拎出来且马上就能在项目中应用的内容出来与大家分享交流下吧.其中会穿插一些框架中的知识点.不