一、服务端

1.新建webapi项目

2.配置WebApiConfig

public const string DEFAULT_ROUTE_NAME = "DB";// DB指数据库上下文
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DEFAULT_ROUTE_NAME",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.EnableSystemDiagnosticsTracing();
}

3.在models文件新建studentInfo模型

[Table("studentInfo")]
public class studentInfo
{
[Key]
public int Id { get; set; }
/// <summary>
/// 学号
/// </summary>
public int studentId { get; set; }
/// <summary>
/// 学生姓名
/// </summary>
public string studentName { get; set; }
/// <summary>
/// 联系方式
/// </summary>
public string contact { get; set; }
}

4.在models文件中添加DB,数据库上下文, DB要继承DbContext

public DbSet<studentInfo> sInfo { get; set; }

5.在models文件中添加接口IstudentRepository

/// <summary>
/// 获得所有人
/// </summary>
/// <returns></returns>
IEnumerable<studentInfo> GetAll();
/// <summary>
/// 根据ID查询
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
studentInfo Get(int id);
/// <summary>
/// 添加
/// </summary>
/// <param name="person"></param>
/// <returns></returns>
studentInfo Add(studentInfo info);
/// <summary>
/// 删除
/// </summary>
/// <param name="id"></param>
void Remove(int id);
/// <summary>
/// 更新
/// </summary>
/// <param name="person"></param>
/// <returns></returns>
bool Update(studentInfo info);

 6.在models文件中添加仓库实现studentRepository

public class studentRepository : IstudentRepository
{
DB db = new DB();
private List<studentInfo> _people = new List<studentInfo>();

public IEnumerable<studentInfo> GetAll()
{
var model = db.sInfo.OrderByDescending(c => c.Id).ToList();
return model;
}

public studentInfo Get(int id)
{
var queryData = db.sInfo.FirstOrDefault(c => c.Id == id);

return queryData;
}

public studentInfo Add(studentInfo info)
{
if (info == null)
{

throw new ArgumentNullException("info");

}

var addmodel = db.sInfo.Add(info);
db.SaveChanges();
return addmodel;
}

public void Remove(int id)
{

var model = db.sInfo.Find(id);
db.sInfo.Remove(model);
db.SaveChanges();

}

public bool Update(studentInfo Info)
{
if (Info == null)
{

return false;
}

else
{
var model = db.sInfo.FirstOrDefault(c => c.Id == Info.Id);
model.studentId = Info.studentId;
model.studentName = Info.studentName;
model.contact = Info.contact;
var entry = db.Entry(model);
entry.Property(c => c.studentId).IsModified = true;
entry.Property(c => c.contact).IsModified = true;

entry.Property(c => c.studentName).IsModified = true;
db.SaveChanges();

return true;
}

}
}

 7.配置web.config

<add name="DB" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=WebApiDB;Integrated Security=SSPI; User ID=sa; password=123456" />

8.在controllers中添加apiController为PersonController

static readonly IstudentRepository databasePlaceholder = new studentRepository();
/// <summary>
/// 所有人数
/// </summary>
/// <returns></returns>
public IEnumerable<studentInfo> GetAllPeople()
{
return databasePlaceholder.GetAll();
}

/// <summary>
/// 查询
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public studentInfo GetPersonByID(int id)
{
studentInfo person = databasePlaceholder.Get(id);
if (person == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return person;
}
/// <summary>
/// 添加
/// </summary>
/// <param name="person"></param>
/// <returns></returns>
public HttpResponseMessage PostPerson(studentInfo person)
{
person = databasePlaceholder.Add(person);
string apiName = MyWebApiDemo.WebApiConfig.DEFAULT_ROUTE_NAME;
var response = this.Request.CreateResponse<studentInfo>(HttpStatusCode.Created, person);
string uri = Url.Link(apiName, new { id = person.Id });
response.Headers.Location = new Uri(uri);
return response;
}
/// <summary>
/// 更新
/// </summary>
/// <param name="person"></param>
/// <returns></returns>
public bool PutPerson(studentInfo person)
{
if (!databasePlaceholder.Update(person))
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return true;

}
/// <summary>
/// 删除
/// </summary>
/// <param name="id"></param>
public void DeletePerson(int id)
{

studentInfo person = databasePlaceholder.Get(id);

if (person == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}

databasePlaceholder.Remove(id);

}

二、客户端

private const string url = "http://localhost:50043/";
public ActionResult Index()
{
List<studentInfo> people = GetAllPerson();
return View(people);
}
/// <summary>
/// 获得所有学生信息
/// </summary>
/// <returns></returns>
static List<studentInfo> GetAllPerson()
{
HttpClient client = new HttpClient();
HttpResponseMessage response = client.GetAsync(url + "api/person").Result;
return response.Content.ReadAsAsync<List<studentInfo>>().Result;
}
public ActionResult Delete(int id)
{
DeletePerson(id);
return RedirectToAction("Index");
}
/// <summary>
/// 删除
/// </summary>
/// <param name="id"></param>
static void DeletePerson(int id)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(url);
var relativeUri = "api/person/" + id.ToString();
var response = client.DeleteAsync(relativeUri).Result;
client.Dispose();
}
static studentInfo GetPerson(int id)
{
HttpClient client = new HttpClient();
HttpResponseMessage response = client.GetAsync(url + "api/person/" + id).Result;

return response.Content.ReadAsAsync<studentInfo>().Result;
}

public ActionResult Update(int id)
{
studentInfo model = GetPerson(id);
return View(model);
}
[HttpPost]
public ActionResult Update(studentInfo info)
{

UpdatePerson(info);

return RedirectToAction("Index");
}

static bool UpdatePerson(studentInfo info)
{

HttpClient client = new HttpClient();
client.BaseAddress = new Uri(url);
var response = client.PutAsJsonAsync("api/person", info).Result;
bool b= response.Content.ReadAsAsync<bool>().Result;
return b;
}
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(studentInfo info)
{
JObject newPerson = AddPerson(info);
return RedirectToAction("Index");
}
static JObject AddPerson(studentInfo info)
{

HttpClient client = new HttpClient();

client.BaseAddress = new Uri(url);

var response = client.PostAsJsonAsync("api/person", info).Result;

return response.Content.ReadAsAsync<JObject>().Result;

}

.Net WebApi基本操作的更多相关文章

  1. Web APi入门之基本操作(一)

    最近学习了下WebApi,WebApi是RESTful风格,根据请求方式决定操作.以博客的形式写出来,加深印象以及方便以后查看和复习. 1.首先我们使用VS创建一个空的WebApi项目 2.新建实体以 ...

  2. js对WebApi请求的基本操作

    在WebAPI对外提供的,大概有4种接口,get,post,delete,put,现在,我就简单的来说一下js请求webApi的方式和大概的作用: get:在webApi中,get方法通常是用来获取数 ...

  3. WebApi初探之基本操作(CRUD)

    public class ProductsController : ApiController { static List<Product> products = new List< ...

  4. [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型、视图、控制器、路由等的基本操作

    [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型.视图.控制器.路由等的基本操作 1. 使用Visual Studio 2015创建Web App (1)文件>新建> ...

  5. WebAPI生成可导入到PostMan的数据

    一.前言 现在使用WebAPI来作为实现企业服务化的需求非常常见,不可否认它也是很便于使用的,基于注释可以生成对应的帮助文档(Microsoft.AspNet.WebApi.HelpPage),但是比 ...

  6. 使用ASP.Net WebAPI构建REST服务(一)——简单的示例

    由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net ...

  7. 【WebAPI No.1】创建简单的 .NETCore WebApi

    介绍: 官方定义如下,强调两个关键点,即可以对接各种客户端(浏览器,移动设备),构建http服务的框架.Web API最重要的是可以构建面向各种客户端的服务. core的WebAPI与ASP.NET ...

  8. C# WebApi使用AttributeRoutes特性路由

    1.在创建WebApi中默认的路由规则,只能满足一般简单的RESTful风格,如 api/Products/{id}. 但是在实际运用中很难严格满足RESTful要求的WebApi.因此需要使用高版本 ...

  9. WebAPI 身份认证解决方案——Phenix.NET企业应用软件快速开发平台.使用指南.21.WebAPI服务(一)

    21   WebAPI服务 ASP.NET Web API,是微软在.NET Framework 4.5上推出的轻量级网络服务框架,虽然作为ASP.NET MVC 4的一部分,但却是一套全新的.独立的 ...

随机推荐

  1. OA系统在实际应用中可发挥出的协同应用价值

    OA软件引进国内已有二十多年,早期的OA软件更多地是扮演一个"文秘"的角色,只进行一些基本的行政事务处理,创造的价值不大.但随着OA软件理论和技术的日趋成熟,OA软件摆脱了原有的局 ...

  2. OC中Foundation框架之NSDictionary、NSMutableDictionary

    NSDictionary概述 NSDictionary的作用类似:通过一个key ,就能找到对应的value 同样 NSDictionary是不可变的,一旦初始化完毕,里面的内容就无法修改 NSDic ...

  3. selenium 利用testNG对异常进行自动截图

    哈哈哈,很久没写博客了,懒了. 因为一些原因最近需要把监听事件重新整理一下,开始没细想,直接copy网上的,其实结果发现报错很多,或者是达不到效果,然后把之前的代码翻出来,仔细看了一下.下面给一些需要 ...

  4. hdu3652 B-number 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3652 题意就是求区间内能被13整除并且包含”13“的数字的个数 感觉是比较中等的数位DP题目 我用的记 ...

  5. [刷题]算法竞赛入门经典(第2版) 5-16/UVa212 - Use of Hospital Facilities

    题意:模拟患者做手术. 其条件为:医院有Nop个手术室.准备手术室要Mop分钟,另有Nre个恢复用的床.准备每张床要Mre分钟,早上Ts点整医院开张,从手术室手术完毕转移到回复床要Mtr分钟.现在医院 ...

  6. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

  7. 初次尝试Linux并记录一二

    假如我有一个Linux系统 安装过程:加载中... 版本:Ubuntu Server 16.04.1 LTS 64位 得到一个IP:*.*.*.* 下载工具 WinSCP: WinSCP是一个Wind ...

  8. 【PHP】文件写入和读取详解

    文章提纲: 一.实现文件读取和写入的基本思路 二.使用fopen方法打开文件 三.文件读取和文件写入操作 四.使用fclose方法关闭文件 五.文件指针的移动 六.Windows和UNIX下的回车和换 ...

  9. 《安卓网络编程》之第六篇 Android中的WIFI和蓝牙

    关于WIFI就不多介绍啦,直接来个段子吧. 问:“WiFi对人体有伤害么?” 答:“不清楚,反正没有WiFi我就浑身不舒服. 比较重要的一点就是WifiManager  wm=(WifiManager ...

  10. springcloud(六):配置中心(一)

    随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多.某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错.配置 ...