如何獲取Web服務方法以訪問URI和複雜的POST數據中的參數?使用URI和DataContract類參數編寫webservice方法
我有在URI參數的一些Web服務方法:
"/api/{something}/{id}"
我也有標有DataContract類/成員屬性我想要的web服務的方法來接受。請注意,我的類包含一個也標有DataContract/Member屬性的子類。
[DataContract]
public class MoreData{
[DataMember]
public string SomeString { get; set; }
[DataMember]
public SubClass SubData {get; set;}
}
我的方法聲明如下:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/api/{something}/{id}")]
public MyWebSvcRetObj Update(string something, string id)
我將如何得到我的更新方法也接受MOREDATA類?我已經能夠寫出這樣的方法:
[OperationContract]
[WebInvoke(Method = "POST")]
public MyWebSvcRetObj Update(MoreData IncomingData)
但只有當URI沒有指定任何參數,而URI看起來像
"api/Update"
最後,我希望我的用戶能夠是這樣的:
$.ajax({
url: 'localhost/site/api/things/12345
type: 'POST'
data: {
SomeString: 'I am a string'
SubData: {
//...more data
}
}
});
我試圖把一個流作爲更新方法的最後一個參數,但似乎並沒有爲有像我給的例子子類的工作。它最終有鍵/值對,如「SubData [SomeSubDataProp]」:「Val」。這對我來說似乎是錯誤的。我也嘗試在Update方法中添加一個MoreData參數作爲最終參數,但是我得到一個錯誤,表示它期待一個流(因爲它期望的是原始數據)。我正在嘗試做什麼?或者也許我正在以這種錯誤的方式進行呢?
UPDATE
由於Faizan Mubasher寫道,我的用戶將能夠發送POST數據如果我的方法是這樣的:
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "/v1/{something}/{id}",
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare
)]
[Description("Update ")]
public void Update(MoreData Incoming, string something, string id)
隨着客戶尋找這樣的:
$.ajax({
type: 'POST',
url: 'http://localhost/app/api/something/12345',
contentType: 'application/json', //need to specify type
data: JSON.stringify({ //note the "stringify" call
SomeString: 'hello, world',
SubClass: {
SubStr: 'hello, again',
SubInt: 98765
}
}
});
我不這麼認爲這是使用POST方法的正確方法。爲什麼您在使用JSON發送數據時在URI中指定{something}/{id}?不明白這件事。 –
我希望我的用戶使用「api/things/123」來獲取某些數據,修改它,並使用相同的URI和GET中的數據對該實體進行更改來執行POST。我的問題是我的「事物」和「身份證」都是動態的。我該如何做到這一點,以便我的用戶可以指定URI中的資源類型和ID發送JSON數據? – spots
所以你想爲同一個URI的GET和POST? –