稱爲在服務方面我有一個非常簡單的配置,通過URL參數傳遞時能正常工作:的Web API定製法[FromBody]參數,通過DataServiceContext.Execute
(段)
builder.EntitySet<MappedAuthorizationGroup>("MappedAuthorizationGroups");
var function = builder.Function("TestMethod");
//parameter removed here, because I want to POST it ([FromBody])
//function.Parameter<string>("id");
function.ReturnsCollectionFromEntitySet<MappedAuthorizationGroup>("MappedAuthorizationGroups");
控制器方法裝飾又是相當簡單:
[HttpPost]
[ODataRoute("TestMethod")] //(id={id})")] // Again, parameter removed because i want to POST it
public IQueryable<MappedAuthorizationGroup> TestMethod([FromBody]string id)
{
... code ...
}
現在,有幾個答案就在這裏如何通過AJAX調用此方法,但我已經在使用微軟的OData客戶端(DAT aServiceContext)的所有「正常」Odata調用(CRUD操作)...所以我想用它來進行這些自定義調用(使用.Execute(),我假設?)
我非常簡單的客戶端代碼:
var client = new Default.Container(new Uri("thecorrectURI"));
var methodURI = new Uri(client.BaseUri, "TestMethod");
var recs = client.Execute<MappedAuthorizationGroup>(methodURI, "POST", new BodyOperationParameter("id", "C26DFAF6-8F32-429B-9DB3-2F8CF0ABBD3A"));
然而,這並不正確填充字符串「ID」參數,應該是[FromBody]當它到達服務器。調查後,這似乎是由於1或2個原因:
內容類型錯誤。但是,如果我將內容類型設置爲「application/x-www-form-urlencoded; charset = utf-8」,我在服務器上得到了一個不同的錯誤,因爲它期望json,我認爲這應該只適用於單一的原始參數。
BodyOperationParameter()序列化爲JSON,但由於某種原因,這在服務器端不起作用。許多帖子都提到它只與簡單的「= myvalue」傳遞兼容。它是否正確?我如何從DataServiceContext對象執行此操作?我需要從更一般的東西上進行這個調用,比如一個HttpClient對象,它很容易設置正確的標題和正文內容?
我想這個移動到身體,而不是一個簡單的URL究其原因,是這個參數實際上將是的GUID的序列化清單,比應該在URL中設置很可能更多。