入门:添加一个支持获取单一资源以及支持POST_PUT和DELETE方法
来源:互联网 发布:flask mysql 编辑:程序博客网 时间:2024/06/02 05:10
原文地址
WCF Web API支持多个宿主环境:自宿主(windows服务或者控制台)和IIS宿主(asp.net webform/mvc)。这个入门文章主要演示在ASP.NET MVC3网站宿主,主要演示如何在一个Web API上允许更新:
如何检索一个特定项的资源
如何在API上启用HTTP POST, PUT和DELETE方法
如何通过HTML表单发送一个POST到API
这篇入门文章的场景是允许客户端添加、删除和更新系统的联系人。
1、解压启动器代码
要快速开始练习,请到这里下载代码,下载解压后,打开Start目录下的ContactManager项目。代码和入门:构建简单的Web API的主要区别是实体代码重构到一个内存 ContactManagerRepository。
public interface IRepository<T> { T Find(int id); IQueryable<T> FindAll(); void Add(T entity); void Remove(int id); void Save(); }using System;using System.Collections.Generic;using System.Linq;using ContactManager.Repositories;namespace ContactManager.Infrastructure{ public abstract class InMemoryRepository<T> : IRepository<T> where T:new() { protected List<T> entities; protected int nextId; static InMemoryRepository<T> instance; static object lockObject = new object(); public T Find(int id) { return entities.SingleOrDefault(e => IsEntityWithId(e, id)); } public IQueryable<T> FindAll() { return entities.AsQueryable(); } public void Add(T entity) { OnAdd(entity, nextId++); entities.Add(entity); } public void Remove(int id) { entities.RemoveAll(e => IsEntityWithId(e, id)); } public void Save() { throw new InvalidOperationException(); } protected abstract bool IsEntityWithId(T contact, int id); protected abstract void OnAdd(T entity, int newId); }}using ContactManager.Infrastructure;using ContactManager.Resources;namespace ContactManager.Repositories{ public interface IContactRepository : IRepository<Contact> { }}
2、启用检索一个单一的资源并和HttpResponseException协同工作
目前我们的API只支持获取一个联系人集合。另一个通常的场景是通过一个URI返回一个单一的资源,如果找不到相关的资源应该返回一个404状态码。
打开ContactsAp.cs
复制以下方法
[WebGet(UriTemplate="{id}")]public Contact GetItem(int id){ var contact = repository.Find(id); if (contact == null) throw new HttpResponseException(HttpStatusCode.NotFound); return contact;}
注意GET方法接受一个ID参数映射到{id} uri模板参数。如果你的请求API是http://localhost:9000/api/contacts/1 的ID将被设置为1,Web API支持将模板参数自动转换为原生类型int。
如果联系人不存在,就抛出HttpResponseException 并设置状态码
编译并运行(F5)
打开Fiddler并在“Request builder”栏输入地址“http://localhost:9000/api/contacts/1”
拷贝以下内容到header
Accept: application/json
运行执行按钮,Contract 1按json格式返回
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Tue, 19 Jul 2011 13:04:26 GMT
X-AspNet-Version: 4.0.30319
Content-Length: 35
Cache-Control: private
Content-Type: application/json; charset=utf-8
Connection: Close
{"ContactId":1,"Name":"Phil Haack"}
3、添加对POST的支持
以下代码是添加一个新的Post方法,添加一个新的Contract
[WebInvoke(UriTemplate = "", Method="POST")]public Contact Post(Contact contact){ repository.Add(contact); return contact;}
上面代码里用到了WebInvokeAttribute,对于所有的HTTP GET以外的其他方法,使用此属性。 该方法指定的参数的必须是大写的。
4、以Json格式发送数据
Web Api允许以多个格式发送内容,下面是使用fiddler发送json的POST
运行项目
启动Fiddler并切换到“Request Builder”
选择“POST”方法,输入以下Uri:http://localhost:9000/api/contacts
拷贝以下内容到“Request Headers”
Accept: application/jsonContent-Type: application/json拷贝以下内容到“Request Body”{"Name":"New Person1"}image按下“Execute”,返回Json格式的新的Contact ,id为7HTTP/1.1 200 OKServer: ASP.NET Development Server/10.0.0.0Date: Tue, 19 Jul 2011 13:12:57 GMTX-AspNet-Version: 4.0.30319Content-Length: 36Cache-Control: privateContent-Type: application/json; charset=utf-8Connection: Close{"ContactId":7,"Name":"New Person1"}5、以XML格式发送数据以xml方式发布,需要替换“Request Headers”为以下内容Content-Type: application/xmlAccept: application/xml替换“Request Body”为以下内容<Contact> <Name>New Person2</Name></Contact>
按下“Execute”,然后双击左窗格中的结果,选择“RAW”标签,返回的结果应该是XML,并显示创建了ID为8的一个联系人
HTTP/1.1 200 OKServer: ASP.NET Development Server/10.0.0.0Date: Tue, 19 Jul 2011 13:25:50 GMTX-AspNet-Version: 4.0.30319Content-Length: 105Cache-Control: privateContent-Type: application/xml; charset=utf-8Connection: Close<?xml version="1.0" encoding="utf-8"?><Contact><ContactId>8</ContactId><Name>New Person2</Name></Contact>
原文地址
- 入门:添加一个支持获取单一资源以及支持POST_PUT和DELETE方法
- 配置tomcat支持http delete和put的方法
- 配置tomcat支持http delete和put的方法
- spring mvc 3支持 http 的put和delete方法
- spring mvc 3支持 http 的put和delete方法
- spring MVC配置form支持PUT和DELETE方法
- 如何判断一个类是否支持某属性和方法以及如何判断IOS的版本
- 如何判断一个类是否支持某属性和方法以及如何判断IOS的版本
- 如何判断一个类是否支持某属性和方法以及如何判断IOS的版本
- 如何判断一个类是否支持某属性和方法以及如何判断IOS的版本
- 支持单一页面可以横屏的一个坑
- spring boot对delete方法的支持
- 一个简单的电话本程序,支持添加和查找功能。
- firefox3添加迅雷支持方法
- RK平台Android4.4 添加一个新的遥控器支持以及添加特殊按键
- SpringMVC添加支持Http的delete、put请求
- SpringMVC添加支持Http的delete、put请求
- springboot支持处理DELETE!
- 计算最大的关系网络的Spark实现
- python学习(三):matplotlib学习
- 编译安装Apache
- JMeter学习-007-JMeter 断言实例之一
- Monkey详解(事件型指令篇)
- 入门:添加一个支持获取单一资源以及支持POST_PUT和DELETE方法
- apache hue安装(hadoop-2.5.2)
- 大数据时代的技术hive:hive介绍
- IDEA下用springboot搭建web项目
- CSS布局奇淫技巧之–各种居中
- imageload缓存图片
- 兼容所有浏览器的复制到剪切板功能,悬浮层不能复制问题解决
- IntelliJ Idea 常用快捷键列表
- django 报错:ValueError: The database backend does not accept 0 as a value for AutoField.