本文将通过一个简单的实例,介绍如何创建一个Rest服务接口,以及通过JQUERY去对它进行调用;主要采取两种方式分别为Get跟Post;其中将通过Post提交简单类型(Sring)以及复杂类型(自定义实现UserModel)与Rest服务进行交互;
一 Rest服务创建
其中Web客户端(ClintWeb)不对其它层的引用,只通过Rest部署后的服务进行效互;
1:实体层(Model)
using System.Runtime.Serialization;namespace Model{ [DataContract] public class UserModel { [DataMember] public int ID { get; set; } [DataMember] public string UserName { get; set; } [DataMember] public string PassWord { get; set; } [DataMember] public int Age { get; set; } public override string ToString() { return string.Format("ID:{0};姓名: {1};年龄:{2};密码:{3}",ID, UserName, Age, PassWord); } }}
此处要注意[DataContract],[DataMember]在命名空间using System.Runtime.Serialization下面;
2:接口层(IServiceInterface)
using System.ServiceModel.Web;using System.ServiceModel;using Model;namespace IServiceInterface{ [ServiceContract] public interface IUser { [WebGet(UriTemplate = "/{ID}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] UserModel GetUserFromID(string ID); [WebGet(UriTemplate = "All", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] List<UserModel> GetAllUser(); [WebInvoke(UriTemplate = "/User/UserName", Method = "POST", RequestFormat = WebMessageFormat.Json,ResponseFormat=WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] String GetUserName(string Name); [WebInvoke(UriTemplate = "/User/Post", Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] string UpdateUser(UserModel model); }}
3:逻辑层(ServiceBll)
using IServiceInterface;using Model;namespace ServiceBll{ public class UserBll:IUser { public static List<UserModel> GetUserList() { List<UserModel> list = new List<UserModel>() { new UserModel(){ID=1,UserName="踏浪帅",PassWord="123456",Age=27}, new UserModel(){ID=2,UserName="wujunyang",PassWord="345678",Age=30}, new UserModel(){ID=3,UserName="cnblogs",PassWord="987654",Age=33} }; return list; } public UserModel GetUserFromID(string ID) { UserModel item = GetUserList().Where(a => a.ID == int.Parse(ID)).SingleOrDefault(); if (item != null) { return item; } else { return new UserModel(); } } public List<UserModel> GetAllUser() { return GetUserList(); } public string UpdateUser(UserModel model) { return model.ToString(); } public String GetUserName(string Name) { return "您好:" + Name; } }}
后面创建的客户端传参数要跟上面各个方法的参数相同,比如:Name,model等
4:Rest服务(RestService)
此处新建一个文本文件把它修改成.svc格式,在其里面写入:
<%@ ServiceHost Language="C#" Debug="true" Service="ServiceBll.UserBll" %>
web.config文件内容:
<?xml version="1.0" encoding="utf-8"?><configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.serviceModel> <behaviors> <endpointBehaviors> <behavior name="webHttp"> <webHttp helpEnabled="true"/> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior name="MapConfigBehavior"> <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 --> <serviceMetadata httpGetEnabled="true"/> <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 --> <serviceDebug includeExceptionDetailInFaults="true"/> <dataContractSerializer maxItemsInObjectGraph="2147483647"/> </behavior> </serviceBehaviors> </behaviors> <bindings> <webHttpBinding> <binding name="webHttpBindConfig" receiveTimeout="00:30:00" sendTimeout="00:30:00" maxReceivedMessageSize="104857600"> <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"/> <security mode="None"></security> </binding> </webHttpBinding> </bindings> <services> <service name="ServiceBll.UserBll" behaviorConfiguration="MapConfigBehavior"> <endpoint binding="webHttpBinding" contract="IServiceInterface.IUser" bindingConfiguration="webHttpBindConfig" behaviorConfiguration="webHttp"/> </service> </services> </system.serviceModel></configuration>