2012-02-13 56 views
0

我們已經創建了一個REST服務(應該使用PUT請求調用該服務) 我們設法使用Jquery從HTML頁面調用服務(請參見下文),但不知怎的,我們不能設法從C#做到這一點 '正常'webrequest似乎並不工作如何從C#中調用PUT REST WCF方法

應該有可能從webrequest發出PUT請求,如果是這樣,我們應該如何把數據放在請求

jQuery代碼:

$("#PutUpdatePassword").on("click", function() { 
      var data = { 
       userId: "9769595975", 
       Passold: "qwert1", 
       Passnew: "qwert2" 
      }; 
      var json = { 'updatePassword': data }; 
      $.ajax({ 
       type: "PUT", 
       url: baseUrl + "/profile/190/updateprofile", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       data: JSON.stringifyWcf(json), 
       success: function() { 
        alert("Ok!"); 
       }, 
       error: function() { 
        alert("Fail!"); 
       } 
      }); 
     }); 
+1

能否請您添加失敗的代碼在C#? – 2012-02-13 10:04:12

回答

4
var request = WebRequest.Create("http://example.com/profile/190/updateprofile"); 
request.Method = "PUT"; 
request.ContentType = "application/json; charset=utf-8"; 
using (var writer = new StreamWriter(request.GetRequestStream())) 
{ 
    var serializer = new JavaScriptSerializer(); 
    var payload = serializer.Serialize(new 
    { 
     UserId = "9769595975", 
     Passold = "qwert1", 
     Passnew = "qwert2" 
    }); 
    writer.Write(payload); 
} 

using (var response = request.GetResponse()) 
using (var reader = new StreamReader(response.GetResponseStream())) 
{ 
    string result = reader.ReadToEnd(); 
    // do something with the results 
} 
+0

邪惡!奇蹟般有效。我們已經嘗試了很多東西,我無法說出確切的區別是什麼,但是這個實際上完成了這項工作。非常感謝。 – Michel 2012-02-13 10:15:35

+0

認爲我們已經忘記了request.contenttype的方式... – Michel 2012-02-13 10:16:01

0

檢查了這一點使用REST API ---

try 
     { 
      var pl= new payLoad(){ UserId = "9769595975",Passold = "qwert1",Passnew ="qwert2"}; 
      DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(payLoad)); 
      MemoryStream mem = new MemoryStream(); 
      //serializing payload 
      ser.WriteObject(mem, pl); 
      string pycontent = Encoding.UTF8.GetString(mem.ToArray(), 0, (int)mem.Length); 
      HttpContent pyContentPost = new System.Net.Http.StringContent(pycontent, Encoding.UTF8, "application/json"); 

      using (var client = new HttpClient()) 
      { 
       client.DefaultRequestHeaders.Accept.Clear(); 
       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

       HttpResponseMessage response = client.PutAsync(baseUrl+ "/profile/190/updateprofile", pyContentPost).Result; 
       var result = response.Content.ReadAsStringAsync().Result; 
       if (response.StatusCode != HttpStatusCode.OK) 
       { 
        throw new WebFaultException<string>("HttpException occured :",HttpStatusCode.InternalServerError); 
       } 
       return Convert.ToInt32(result);//return result 
      } 
     } 
     catch (HttpRequestException ex) 
     { 
      throw new WebFaultException<string>(string.Format("Service Exception occured : {0}", ex.Message), HttpStatusCode.BadRequest); 
     }