ASP.NET---如何使用web api创建web服务
1 首先创建asp.net web空项目,并且创建模拟数据,我在工程下面创建了一个Models文件夹,在文件夹Nodels下面创建类Product和Repository
具体如下:
[Serializable]
public class Product
{
public int ProductID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public string Category { get; set; }
}
public class Repository
{
private static Dictionary<int, Product> data = new Dictionary<int, Product>(); static Repository()
{
Product[] dataArray = new Product[]
{
new Product {Name="Kayak",Category="watersports",Price=275M },
new Product {Name="lifejacket",Category="watersports",Price=48.95M },
new Product {Name="Soccer Ball",Category="Soccer",Price=19.50M },
new Product {Name="corner flags",Category="Soccer",Price=34.94M },
new Product {Name="Stadium",Category="Soccer",Price=795000M },
new Product {Name="thinking cap",Category="Chess",Price=16M },
new Product {Name="unsteady chair",Category="Chess",Price=29.95M },
new Product {Name="human chess board",Category="Chess",Price=75M },
new Product {Name="Bling-Bling King",Category="Chess",Price=1200M },
};
for (int i = ; i < dataArray.Length; i++)
{
dataArray[i].ProductID = i;
data[i] = dataArray[i];
}
} public IEnumerable<Product> Products
{
get
{
return data.Values;
}
} public void SaveProduct(Product pro)
{ data[pro.ProductID] = pro; } public void DeleteProduct(Product pro)
{
if (data.ContainsKey(pro.ProductID))
{
data.Remove(pro.ProductID);
}
} public void AddProduct(Product pro)
{
pro.ProductID = Products.Select(p => p.ProductID).Max() + ;
SaveProduct(pro);
}
}
2 asp.net4.5引入了web api功能,可以通过该功能创建简单,轻量级,仿效http的web服务,从而使用各种http方法(get,put,post,delete等)指定不同的
数据操作,这是表述性状态转移(rest)风格的web API基础。通常称为rest服务,即通过URL以及用于请求他的http方法指定某项操作
3 web API服务一般遵循/api/<datatype>这一web api约定
4 如何创建web 服务
要创建web服务,需要使用web api controller class(web api 控制器类)项模板在visual studio项目中添加一个新项,web api控制器的一个默认约定是
web api类的名称应该是web服务处理的数据类型名称与controller一词的组合,那么我这个示例就是ProductController
创建成功后如下所示:
public class ProductController : ApiController
{
// GET api/<controller>
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
} // GET api/<controller>/5
public string Get(int id)
{
return "value";
} // POST api/<controller>
public void Post([FromBody]string value)
{
} // PUT api/<controller>/5
public void Put(int id, [FromBody]string value)
{
} // DELETE api/<controller>/5
public void Delete(int id)
{
}
}
5 创建路由的配置
为啥要创建路由:默认情况下,web API 控制器处于不可用的状态,因此必须使用URL路由功能在URL与类之间建立映射关系。因此,我在示例项目下创建App_Start文件夹,并在其中添加RouteConfig类文件,并定义控制器类ProductController所需的路由
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapHttpRoute(name: "WebApiRoute",
routeTemplate: "api/{controller}/id",
defaults: new { id = RouteParameter.Optional });
}
}
这是为控制器类创建的路由,需要引用system.web.http命名空间,最后需要在全局应用程序类中注册路由,以便在应用程序启动时初始化URL路由
在实例中添加全局应用程序类
public class Global : System.Web.HttpApplication
{ protected void Application_Start(object sender, EventArgs e)
{
RouteConfig.RegisterRoutes(RouteTable.Routes);
} protected void Session_Start(object sender, EventArgs e)
{ } protected void Application_BeginRequest(object sender, EventArgs e)
{ } protected void Application_AuthenticateRequest(object sender, EventArgs e)
{ } protected void Application_Error(object sender, EventArgs e)
{ } protected void Session_End(object sender, EventArgs e)
{ } protected void Application_End(object sender, EventArgs e)
{ }
}
6 接下来就可以测试创建的web api了
启动应用程序输入URL:http://localhost:59288/api/product结果如下:

7 下面我们创建asp.net web form来进行测试
首先需要添加jquery文件jquery-3.2.1.js到项目中,然后再在测试的webform窗体中引用它,测试窗体的前台代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ProductTest.aspx.cs" Inherits="WebAPIServer.ProductTest" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
div {
margin-bottom:10px;
}
</style>
<script src="Script/jquery-3.2.1.js"></script>
<script type="text/javascript">
function GetObjectString(dataObject)
{
if (typeof dataObject=="string") {
return dataObject;
}
else {
var message = "";
for (var prop in dataObject) {
message += prop + ":" + dataObject[prop] + "\n";
}
return message;
}
} $(document).ready(function () {
$("button").click(function (e) {
var action = $(e.target).attr("data-action");
$.ajax(
{
//设置ajax请求的url
url: action == "all" ? "/api/product" : "/api/product/1",
//设置请求的http方式
type: "GET",
//设置请求的数据类型
datatype: "json",
//设置在ajax请求成功时调用的函数,次函数传递从web服务中检索到的数据
success: function (data)
{
debugger;
if (Array.isArray(data)) {
var message = "";
for (var i = ; i < data.length; i++) {
message += "Item" + [i] + "\n"
+ GetObjectString(data[i]) + "\n\n";
}
$("#results").text(message);
}
else {
$("#results").text(GetObjectString(data));
}
}
});
e.preventDefault();
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<button data-action="all">Get all</button>
<button data-action="one">Get one</button>
</div>
<textarea id="results" cols="" rows=""> </textarea>
</form>
</body>
</html>
点击get all 发送ajax请求,就会调用webapi控制器中的get无参数方法显示结果如下:
这个就是我创建的web API get无参数方法返回的结果
接下来就是对象序列化的问题开源的Json.NET程序包支持这种特性。
ASP.NET---如何使用web api创建web服务的更多相关文章
- 使用ASP.NET web API创建REST服务(二)
Creating a REST service using ASP.NET Web API A service that is created based upon the architecture ...
- 使用ASP.NET web API创建REST服务(三)
本文档来源于:http://www.cnblogs.com/madyina/p/3390773.html Creating a REST service using ASP.NET Web API A ...
- Web Api系列教程第2季(OData篇)(二)——使用Web Api创建只读的OData服务
前言 很久没更新了,之前有很多事情,所以拖了很久,非常抱歉.好了,废话不多说,下面开始正题.本篇仍然使用上一季的的项目背景(系列地址http://www.cnblogs.com/fzrain/p/34 ...
- MVC项目实践,在三层架构下实现SportsStore-09,ASP.NET MVC调用ASP.NET Web API的查询服务
ASP.NET Web API和WCF都体现了REST软件架构风格.在REST中,把一切数据视为资源,所以也是一种面向资源的架构风格.所有的资源都可以通过URI来唯一标识,通过对资源的HTTP操作(G ...
- ASP.NET Web API——选择Web API还是WCF
WCF是.NET平台服务开发的一站式框架,那么为什么还要有ASP.NET Web API呢?简单来说,ASP.NET Web API的设计和构建只考虑了一件事情,那就是HTTP,而WCF的设计主要是考 ...
- 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作
原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...
- [转]Web Api系列教程第2季(OData篇)(二)——使用Web Api创建只读的OData服务
本文转自:http://www.cnblogs.com/fzrain/p/3923727.html 前言 很久没更新了,之前有很多事情,所以拖了很久,非常抱歉.好了,废话不多说,下面开始正题.本篇仍然 ...
- Web Api ——创建WebAPI
方法在Win10 + VS2017(MVC5)测试通过 1.建立 WebApi项目: 选择菜单 “文件->新建醒目->web ->ASP.NET Web 应用程序” 输入项目名称和位 ...
- Web Api 创建及其使用
由于创建博客,我需要尝试一些新的技术,新的思路,所以我没规规矩矩的写博客,用上了诸多以前没用的东西,比如现在这个(我只是听过web api 我连 web server 都只是用过两三次/手动滑稽) 昨 ...
随机推荐
- Build Telemetry for Distributed Services之OpenTracing简介
官网地址:https://opentracing.io/ What is Distributed Tracing? Who Uses Distributed Tracing? What is Open ...
- php开启短标签与<?xml version="1.0" encoding="UTF-8"?>冲突
前两天写了个生成mapsite的源码,想提交到百度和谷歌,在本地测试一点问题都没有,但是在服务器上就显示500错误 最后废了九牛二虎之力,终于可以设置iis直接显示出错信息. 也搞懂了问题所在,默认服 ...
- Cognos Framework操作记录:开发复杂报表
设计一张数据库的表:TEST_001_ADDRESS 表结构: | 编号 | 姓名 | 省 | 市 | 县 | 公司 | 部门 | 职位 | | ---- | --- | -- | - | - | - ...
- SecureCRT 添加Mac Localhost
1.启动sshd服务: sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist 停止sshd服务的方法: sudo launchc ...
- Centos7系统下以RPM方式如何安装mysql-5.7
检查系统是否装有mariadb rpm -qa | grep mariadb 卸载mariadb 强制卸载mariadb rpm -e --nodeps mariadb-libs-5.5.35-3.e ...
- EPP状态码
服务器状态代码由您的域的注册表设置 EPP状态码 RDAP状态映射 这是什么意思? 你应该做点什么吗? addPeriod 加期 该宽限期是在域名初始注册后提供的.如果注册服务商在此期间删除了域名,则 ...
- 如何通过Exchange2010 OWA更改过期密码
很多Exchange 2003管理员都通过IISADMPWD虚拟目录为员工提供用户密码修改功能,这大大方便了移动用户和非加入域用户在密码到期时的更改操作.您也许已经注意到:Windows Server ...
- exchange 2010入门到精通
exchange 2010入门到精通 Exchange产品介绍和功能演示 Exchange是什么 目前最受欢迎企业级邮件服务器产品 市场占有率70%(2011数据) 微软消息协作平台中核心产品 Exc ...
- MySQL中的日期和时间:使用和说明,以及常用函数
1.首先需要注意: 1.1 MySQL中把日期和时间是分开的. 以字符串2007-12-31 00:59:59为例: 日期部分:2007-12-31.这部分也可以叫做一个日期表达式. 时间部分:00: ...
- 最新 盛趣游戏java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.盛趣游戏等10家互联网公司的校招Offer,因为某些自身原因最终选择了盛趣游戏.6.7月主要是做系统复习.项目复盘.Leet ...