WCF Rest用法

GET

GET單參數(shù)

服務(wù)器

[OperationContract]
string GetOneParameter(string value);

[WebInvoke(Method = "GET", UriTemplate = "GetOneParameter/{value}", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
//寫在UriTemplate中的參數(shù)改览,必須定義為string類型
public string GetOneParameter(string value)
{
    return string.Format("You get: {0}", value);
}

客戶端

static string url = "http://localhost:8733/Design_Time_Addresses/WcfServicePractice/Service1/";
public static async void GetOneParameter(int value)
{
    HttpClient client = new HttpClient();
    var r= await client.GetStringAsync(string.Format("{0}GetOneParameter/{1}",url,value));
}

4種WebMessageBodyStyle

Bare:請(qǐng)求和響應(yīng)都是裸露的
WrappedRequest:請(qǐng)求是包裹的(,響應(yīng)是裸露的)
WrappedResponse:響應(yīng)是包裹的(顽冶,請(qǐng)求是裸露的)
Wrapped:請(qǐng)求和響應(yīng)都是包裹的
例子:GetOneParameter
BodyStyle = WebMessageBodyStyle.Bare / WrappedRequest
返回值:"You get: 1"
BodyStyle = WebMessageBodyStyle.WrappedResponse / Wrapped
返回值:{"GetOneParameterResult":"You get: 1"}
WrappedRequest和Wrapped的請(qǐng)求是包裹的,即要指明key=value

GET多參數(shù)

寫法1

服務(wù)器

[OperationContract]
string GetManyParameter(string number1, string number2);

[WebInvoke(Method = "GET", UriTemplate = "GetManyParameter/{number1}/{number2}", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
//UriTemplate決定了number1和number2的位置
public string GetManyParameter(string number1, string number2)
{
    return string.Format("get : number1 * number2 = "+ (int.Parse(number1)*int.Parse(number2)) );
}

客戶端

public static async void GetManyParameter(int number1, int number2)
{
    HttpClient client = new HttpClient();
    var r = await client.GetStringAsync(url+string.Format("GetManyParameter/{0}/{1}",number1,number2));
}

寫法2

服務(wù)器

[OperationContract]
string GetManyParameter2(string number1, string number2);

[WebInvoke(Method = "GET", UriTemplate = "GetManyParameter?number1={number1}&number2={number2}", ResponseFormat = WebMessageFormat.Json,RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
//UriTemplate采用key=value的寫法
public string GetManyParameter2(string number1, string number2)
{
   return string.Format("get : number1 * number2 = " + (int.Parse(number1) * int.Parse(number2)));
}

客戶端

public static async void GetManyParameter2(int number1, int number2)
{
   HttpClient client = new HttpClient();
   var r = await client.GetStringAsync(string.Format("{0}GetManyParameter?number1={1}&number2={2}",url,number1,number2));
}

POST

POST單參數(shù)

服務(wù)器

[OperationContract]
string PostOneParameter(int value);

[WebInvoke(Method = "POST", UriTemplate = "PostOneParameter", ResponseFormat = WebMessageFormat.Json,RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
public string PostOneParameter(int value)
{
   return string.Format("You post: {0}", value);
}

客戶端

public static async void PostOneParameter(int value)
{
   HttpClient client = new HttpClient();
   //"application/json"不能少
   HttpContent content = new StringContent(value.ToString(), Encoding.UTF8,"application/json");
   var result=await client.PostAsync(url + "PostOneParameter", content);
   var r=  result.Content.ReadAsStringAsync().Result;
}

POST多參數(shù)

服務(wù)器

[OperationContract]
string PostManyParameters(int number1, int number2);

[WebInvoke(Method = "POST", UriTemplate = "PostManyParameters", ResponseFormat = WebMessageFormat.Json,RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
//多參數(shù)POST必須采用Wrapped/WrappedRequest售碳,指明number1是哪個(gè)强重,number2是哪個(gè)
//單參數(shù)Bare/Wrapped均可,但是服務(wù)器和客戶端請(qǐng)求要對(duì)應(yīng)
public string PostManyParameters(int number1,int number2)
{
   return string.Format("post : number1 - number2 = " + (number1 - number2));
}

客戶端

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public static void PostManyParameters(int number1, int number2)
{
   WebClient client = new WebClient();
   JObject jObject = new JObject();
   jObject.Add("number1", number1);
   jObject.Add("number2", number2);
   client.Headers[HttpRequestHeader.ContentType] = "application/json";
   client.Encoding = System.Text.Encoding.UTF8;
   string result = client.UploadString(url+ "PostManyParameters", jObject.ToString(Newtonsoft.Json.Formatting.None, null));
}

POST實(shí)體類

實(shí)體類

using System.Runtime.Serialization;
[DataContract]
public class Student
{
    [DataMember]
    public int PKID { get; set; }
    [DataMember]
    public string StudentNumber { get; set; }
    [DataMember]
    public string Name { get; set; }
}

服務(wù)器

[OperationContract]
string PostModel(Student student);

[WebInvoke(Method = "POST", UriTemplate = "PostModel", ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
//客戶端手動(dòng)序列化對(duì)象团滥,服務(wù)端自動(dòng)反序列化為類對(duì)象
//客戶端竿屹、服務(wù)端類可以不同报强,只會(huì)反序列化回名字相同的字段灸姊、屬性(忽略大小寫)
//實(shí)體類加上DataContract和DataMember特性
public string PostModel(Student student)
{
    return string.Format("You post a student info: StudentNumber-{0}, Name-{1}", student.StudentNumber, student.Name);
}

客戶端

public static async void PostModel(Student student)
{
   string str = JsonConvert.SerializeObject(student);
   StringContent content = new StringContent(str, Encoding.UTF8, "application/json");
   HttpClient client = new HttpClient();
   var result =await client.PostAsync(url + "PostModel", content);
   var r= result.Content.ReadAsStringAsync().Result;
}

POST實(shí)體類和其他參數(shù)

服務(wù)器

[OperationContract]
string PostModelAndParameter(Student student, string isDelete);

[WebInvoke(Method = "POST", UriTemplate = "PostModelAndParameter/{isDelete}", ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
public string PostModelAndParameter(Student student,string isDelete)
{
   if(bool.Parse(isDelete))
   {
        return string.Format("You want to delete a student, info: StudentNumber-{0}, Name-{1}", student.StudentNumber, student.Name);
   }
   else
   {
        return string.Format("You want to add a student, info: StudentNumber-{0}, Name-{1}", student.StudentNumber, student.Name);
   }
}

客戶端

public static async void PostModelAndParameter(Student student, bool isDelete)
{
   string str = JsonConvert.SerializeObject(student);
   StringContent content = new StringContent(str, Encoding.UTF8, "application/json");
   HttpClient client = new HttpClient();
   var result = await client.PostAsync(string.Format("{0}PostModelAndParameter/{1}",url,isDelete), content);
   var r = result.Content.ReadAsStringAsync().Result;
}

POST流對(duì)象和其他參數(shù)

服務(wù)器

[OperationContract]
string PostStream(string name, Stream stream);

[WebInvoke(Method = "POST", UriTemplate = "PostStream/{name}", ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
public string PostStream(string name, Stream stream)
{
   StreamReader reader = new StreamReader(stream);
   string result= string.Format("You post stream : {0} && its name is {1}.", reader.ReadToEnd(), name);
   return result;
}

客戶端

public static async void PostStream()
{
   string name = "123";
   Stream stream = new MemoryStream(Encoding.UTF8.GetBytes("This is a stream."));
   StreamContent content = new StreamContent(stream);
   HttpClient client = new HttpClient();
   var result = await client.PostAsync(string.Format("{0}PostStream/{1}",url,name), content);
   var r = result.Content.ReadAsStringAsync().Result;
}

返回實(shí)體類

服務(wù)器

[OperationContract]
Student CombinationStudent(int PKID, string StudentNumber, string Name);

[WebInvoke(Method = "POST", UriTemplate = "CombinationStudent", ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public Student CombinationStudent(int PKID, string StudentNumber, string Name)
{
    Student s = new Student() { PKID = PKID, StudentNumber = StudentNumber, Name = Name };
    return s;
}

客戶端

public static void CombinationStudent(int PKID, string StudentNumber, string Name)
{
   WebClient client = new WebClient();
   JObject jObject = new JObject();
   jObject.Add("PKID", PKID);
   jObject.Add("StudentNumber", StudentNumber);
   jObject.Add("Name", Name);
   client.Headers[HttpRequestHeader.ContentType] = "application/json";
   client.Encoding = System.Text.Encoding.UTF8;
   string result = client.UploadString(url + "CombinationStudent", jObject.ToString(Newtonsoft.Json.Formatting.None, null));
   Student s = JsonConvert.DeserializeObject<Student>(result);
}

配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- 部署服務(wù)庫(kù)項(xiàng)目時(shí),必須將配置文件的內(nèi)容添加到
 主機(jī)的 app.config 文件中秉溉。System.Configuration 不支持庫(kù)的配置文件力惯。 -->
 <system.serviceModel>
    <services>
      <service name="WcfServicePractice.Service1">
        <endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="WcfServicePractice.IService1" />
        <host>
          <baseAddresses>
            <!--如果要修改baseAddress,采用管理員登錄運(yùn)行服務(wù)-->
            <add baseAddress="http://localhost:8733/Design_Time_Addresses/WcfServicePractice/Service1/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True" />    
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末召嘶,一起剝皮案震驚了整個(gè)濱河市父晶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弄跌,老刑警劉巖甲喝,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異铛只,居然都是意外死亡埠胖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門淳玩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來直撤,“玉大人,你說我怎么就攤上這事蜕着∧笔” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蓖乘。 經(jīng)常有香客問我锤悄,道長(zhǎng),這世上最難降的妖魔是什么驱敲? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任铁蹈,我火速辦了婚禮,結(jié)果婚禮上众眨,老公的妹妹穿的比我還像新娘握牧。我一直安慰自己,他們只是感情好娩梨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布沿腰。 她就那樣靜靜地躺著,像睡著了一般狈定。 火紅的嫁衣襯著肌膚如雪颂龙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天纽什,我揣著相機(jī)與錄音措嵌,去河邊找鬼。 笑死芦缰,一個(gè)胖子當(dāng)著我的面吹牛企巢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播让蕾,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浪规,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了探孝?” 一聲冷哼從身側(cè)響起笋婿,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顿颅,沒想到半個(gè)月后缸濒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粱腻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年庇配,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栖疑。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡讨永,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遇革,到底是詐尸還是另有隱情卿闹,我是刑警寧澤揭糕,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站锻霎,受9級(jí)特大地震影響著角,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旋恼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一吏口、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冰更,春花似錦产徊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至奠衔,卻和暖如春谆刨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背归斤。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工痊夭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脏里。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓她我,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親膝宁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸦难,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容