HelloWord! (一) 搭建简单的REST Service -- Service
来源:互联网 发布:淘宝上使用信用卡支付 编辑:程序博客网 时间:2024/06/06 14:04
最近在工作中,项目里有用到REST 服务获取数据,这种ROA(面向资源)框架设计非常轻量,Client端调用也非常简便。相比之前WCF模式要简单和方便的多,话不多说,直接上代码吧。
实体:
namespace H.BizEntity.MyREST{ using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; [DataContract] public class MyRESTEntity { /// <summary> /// 系统编号 /// </summary> [DataMember] public int SysNo { get; set; } [DataMember] public string LoginName { get; set; } [DataMember] public string LoginPasswd { get; set; } [DataMember] public DateTime? RegisterDate { get; set; } [DataMember] public DateTime? InDate { get; set; } }}
这次搭建利用 MVC 路由方式添加 Service 节点..
新建一个Web项目
项目里只需要一个Global.asax 文件就行了. 本次演示中通过Config配置来加载创建REST Service
最终会执行下列代码进行ROUTE添加
//方便全局信息处理,使用了工厂类进行处理。 WebServiceHostFactory factory = new RestWebServiceHostFactory(customBizExceptionTypeName); //此处是根据Config 配置信息获取 REST Service //获取数据格式: //<serviceList> // <service path="MyRESTService" type="H.Service.Restful.MyREST.MyRESTService, H.Service.Restful" /> //</serviceList> List<ServiceData> list = ServiceConfig.GetAllService(); foreach (ServiceData de in list) { string routePrefix = (de.Path == null ? string.Empty : de.Path.Trim()); Type serviceType = Type.GetType(de.Type.Trim(), true); //添加到路由 RouteTable.Routes.Add(new ServiceRoute(routePrefix, factory, serviceType)); }
IISHost 已经添加好了,接下来看贴上Service 代码
namespace H.Service.Restful.MyREST{ using H.BizEntity; using H.BizEntity.MyREST; using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel; using System.ServiceModel.Activation; using System.ServiceModel.Web; using System.Text; using System.Threading.Tasks; [ServiceContract] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single, AddressFilterMode = AddressFilterMode.Any)] public partial class MyRESTService { List<MyRESTEntity> entityList = new List<MyRESTEntity>(); public MyRESTService() { for (int i = 0; i < 5; i++) { entityList.Add(new MyRESTEntity() { InDate = DateTime.Now, LoginName = "Test" + i, LoginPasswd = "TestPwd" + i, RegisterDate = DateTime.Now, SysNo = i + 1 }); } } #region 获取数据List [WebInvoke(UriTemplate = "/GET/GetDataToJson", Method = "GET", ResponseFormat = WebMessageFormat.Json)] public List<MyRESTEntity> GetDataToJsonList() { //throw new BizException("出错了!"); var user = GetHeaderValue("user"); var pwd = GetHeaderValue("pwd"); return entityList; } private string GetHeaderValue(string name) { return WebOperationContext.Current.IncomingRequest.Headers.Get(name); } [WebInvoke(UriTemplate = "/GET/GetDataToXml", Method = "GET", ResponseFormat = WebMessageFormat.Xml)] public List<MyRESTEntity> GetDataToXmlList() { throw new Exception(); return entityList; } #endregion #region 获取指定SysNo Entity [WebInvoke(UriTemplate = "/GET/GetDataToJson/{SysNo}", Method = "GET", ResponseFormat = WebMessageFormat.Json)] public MyRESTEntity GetDataToJsonBySysNo(string sysNo) { return entityList.Find(result => { return result.SysNo.ToString() == sysNo; }); } [WebInvoke(UriTemplate = "/GET/GetDataToXml/{SysNo}", Method = "GET", ResponseFormat = WebMessageFormat.Xml)] public MyRESTEntity GetDataToXmlBySysNo(string sysNo) { return entityList.Find(result => { return result.SysNo.ToString() == sysNo; }); } #endregion /// <summary> /// 创建 /// </summary> /// <param name="entity"></param> /// <returns></returns> [WebInvoke(UriTemplate = "/CREATE/CreateMyREST", Method = "POST", ResponseFormat = WebMessageFormat.Json)] public MyRESTEntity CreateMyREST(MyRESTEntity entity) { entity.SysNo = 8; return entity; } /// <summary> /// 更新 /// </summary> /// <param name="entity"></param> /// <returns></returns> [WebInvoke(UriTemplate = "/UPDATE/UpdateMyREST", Method = "PUT", ResponseFormat = WebMessageFormat.Json)] public MyRESTEntity UpdateMyREST(MyRESTEntity entity) { entity.SysNo = 8; return entity; } /// <summary> /// 删除 /// 此处考虑删除操作传递的是对象,所以Method = PUT , 如果只针对 单个变量传递过来的话,DELETE 方式更为合适.. /// </summary> /// <param name="entity"></param> /// <returns></returns> [WebInvoke(UriTemplate = "/DELETE/DeleteMyREST", Method = "PUT", ResponseFormat = WebMessageFormat.Json)] public MyRESTEntity DeleteMyREST(MyRESTEntity entity) { entity.SysNo = 8; return entity; } }}
REST Service 搭建好了。运行前面建好的Web项目。然后后面加上Services名称+方法UriTemplate 指定的名称
Json方式
Xml 方式
- HelloWord! (一) 搭建简单的REST Service -- Service
- Java Web 学习笔记之九:利用Jetty+restEasy搭建简单的rest web service
- 使用Apache CXF搭建REST风格的Web Service
- rest service
- REST Web Service的兴起
- 利用Spring MVC搭建REST Service
- SOAPUI测试REST项目(一)---REST Service Mocking
- Android Bound Service(一) ----- Extending Binder Service(进程内绑定Service的简单例子)
- 关于Web Service和Rest Service的理解
- SOAP Web Service与REST Web Service的区别
- 构建REST风格的Web Service
- 基于REST架构的Web Service设计
- 基于REST架构的Web Service设计
- 基于REST架构的Web Service设计
- 基于REST架构的Web Service设计
- 基于REST架构的Web Service设计
- 基于REST架构的Web Service设计
- 基于REST架构的Web Service设计
- C/C++代码格式优化工具----astyle
- 2013百度校园招聘-机器学习和数据挖掘工程师-笔试题
- 第八次
- Xbox One:微软发布“改变一切”的新游戏机
- Linux 内核 Completely Fair Scheduler (cfs)调度算法
- HelloWord! (一) 搭建简单的REST Service -- Service
- git 团队协作规范及常用命令
- UITableView设置背景图片
- ios开发 动态获取中英文键盘高度
- ubuntu上PostgreSQL的安装
- 函数模板 const转换
- c#版汉字拼音大全,支持多音字
- SP2-1503: Unable to initialize Oracle call interface(同时装10g和11g)
- linux下进程间通信的几种主要手段