本文將通過一個簡單的執行個體,介紹如何建立一個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>