.net 4.0篇
在.net 4.0下面微軟並沒有提供類似Net.Http的Rest訪問元件,而是在codeplex上面提供的WCF REST Starter Kit Preview 2 裡面可以找到早期的版本,訪問地址:http://aspnet.codeplex.com/releases/view/24644,這個問題在.net 4.5中得到明確支援和完美解決。那我們就從這個地址下載安裝包進行安裝,然後在C盤預設的路徑下找到這幾個DLL:“Microsoft.Http.dll”、“Microsoft.Http.Extensions.dll”準備新增到專案的引用中去。
注意:本篇介紹的是基於接近0配置的實現方式,右鍵新增引用和非常龐大的配置的方法不在研究之列。
上一篇中我們介紹了服務端如何去搭建,那麼服務暫時就還是使用上一篇的。
開發工具:Visual Studio 2013
.net版本:4.0
一、新建控制檯程式:
注意:WinForm、WebForm的方式將會一樣。
開啟Visual Studio 2013新建控制檯WCFRestFulClient4,新增對組建的引用:
最後一個是用來序列化和反序列化JSON的,可以在這裡下載得到最新版:http://json.codeplex.com/
然後新增和服務端欄位一致的實體類如下:
public class User { public string ID { get; set; } public string Age { get; set; } public string Name { get; set; } }
這裡不需要其他的修飾,僅僅只是為了反序列化用。
二、新建一個輔助類:
為了更加直觀看到每種操作的結果,特新建輔助類ClientHelper,千萬別賦予這個類其他的想象,他僅僅只是一個普通類(絕對不是微軟WCF自動生成的代理類)。新增4種操作方法:
public static void GetPerson() { var client = new HttpClient(); var strUrl =baseUrl+ "GetPerson"; var response = client.Get(strUrl); response.EnsureStatusIsSuccessful(); var json = response.Content.ReadAsString(); var data = JsonConvert.DeserializeObject<User>(json); Console.WriteLine(data); } //2 ok public static void GetPersonById() { var client = new HttpClient(); var strUrl = baseUrl+"GetPersonById/1"; var response = client.Get(strUrl); response.EnsureStatusIsSuccessful(); var json = response.Content.ReadAsString(); var data = JsonConvert.DeserializeObject<User>(json); Console.WriteLine(data); } //3 ok public static void GetPersonPost() { var task = new User { ID = "0001" }; var client = new HttpClient(); var strUrl = baseUrl+"GetPersonPost"; var response = client.Post(strUrl, GetContent(task)); response.EnsureStatusIsSuccessful(); Console.WriteLine(response.Content.ReadAsString()); } //4 ok public static void GetPersonPostById() { var task = new User { Age = "12", ID = "001", Name = "zhangsan" }; ; var client = new HttpClient(); var strUrl = baseUrl+"GetPersonPostById"; var response = client.Post(strUrl, GetContent(task)); response.EnsureStatusIsSuccessful(); Console.WriteLine(response.Content.ReadAsString()); }
解釋:使用Get方式請求服務,只需一個引數就是URL,如果要帶參在URL後面加,但是使用POST方式請求服務就需要一個HttpContent,這個HttpContent裡面一般包含的是引數,如果服務端定義為接收JSON型別,那麼這裡就需要序列化引數為JSON型別,服務端預設會解析成物件,PUT和DELETE暫時不討論。
另附產生HttpContent的方式:
private static HttpContent GetContent(User task)
{
var strContent = JsonConvert.SerializeObject(task);
var data = System.Text.Encoding.UTF8.GetBytes(strContent);
return HttpContent.Create(data, "application/json");
}
無論是哪種方式,都需要呼叫response.Content.ReadAsString();來獲取響應字串,然後根據實際情況去解析他。
response.EnsureStatusIsSuccessful()的作用是檢查響應的StatusCode。
那麼這4個方法寫完,只需在main方法中呼叫即可出現結果,具體步驟為:先啟動服務端ILongshi.BIZ:
然後啟動客戶端WCFRestFulClient4:
為了證實POST的引數能夠傳遞過去,我們斷點除錯服務端:
既然引數傳遞到了,就可以NNN~~~了。
本篇程式碼下載:點選