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 方式





原创粉丝点击