C# 杰达。OData v.3操作后参数接收为空
我的OData POST操作将参数接收为null,因为它将从JayData客户端获取这些参数作为主体的一部分,并希望它们作为URI的一部分 我已经创建了一个基于和的OData服务(现在就在那里)。它有一个后置操作:C# 杰达。OData v.3操作后参数接收为空,c#,javascript,wcf,odata,jaydata,C#,Javascript,Wcf,Odata,Jaydata,我的OData POST操作将参数接收为null,因为它将从JayData客户端获取这些参数作为主体的一部分,并希望它们作为URI的一部分 我已经创建了一个基于和的OData服务(现在就在那里)。它有一个后置操作: [WebInvoke(Method = "POST")] public void DeletePeople(string guidsToDelete) {...} OData v.3标准不支持将参数作为主体的一部分传递给POST操作,但是。也就是说,在System.Data.Ser
[WebInvoke(Method = "POST")]
public void DeletePeople(string guidsToDelete) {...}
OData v.3标准不支持将参数作为主体的一部分传递给POST操作,但是。也就是说,在System.Data.Services.Client中,必须将它们设置为UriOperationParameter而不是BodyOperationParameter
我可以在JayData的ServiceOperation定义中配置将参数发送到何处,还是必须假设它现在不支持参数POST
// This works, of course :-)
// JayData client. EntityContext definitions. Changed to GET instead of POST
'DeletePeople': { type: $data.ServiceOperation, method: 'GET', params: [{ name: 'guidsToDelete', type: 'Edm.String' }] }
// Updated server operation (not action any more):
[WebGet]
public void DeletePeople(string guidsToDelete)
蒂亚
RaistJayData希望立即通过
WebGet
属性发布服务操作。关于OData标准,您是对的,它确实期望URL参数中的POST操作参数,但奇怪的是,经典WCF和WebAPI都在主体中使用参数。。。这是一个标准,所以必须遵守。如果您无法使用WebGet属性,请随时提出支持调用后方法的功能:
POST /Customers('ALFKI')/SampleEntities.CreateOrder HTTP/1.1 Host: host
Content-Type: application/json;odata=verbose DataServiceVersion: 3.0
MaxDataServiceVersion: 3.0
If-Match: ...ETag...
Content-Length: ####
{
"quantity": 2,
"discountCode": "BLACKFRIDAY"
}
HTTP响应:
HTTP/1.1 204 OK
Date: Fri, 11 Oct 2008 04:23:49 GMT
 同意,来自标准的奇怪请求,正如POST应该具有的那样,不仅是语义用法,而且是功能用法(将长参数值作为正文的一部分发送)注:标准确实支持POST操作(请参阅mixja答案和我对它的评论)。正如Robesz所说,事实是JayData现在不支持POST操作(v.1.3.1),只支持获取服务操作。你是对的。从协议规范的链接:2.2.7.5.1调用操作请求。“调用操作请求必须使用HTTP POST”。我一直认为“服务操作”是一个WCF数据服务术语,它定义了开发人员用来指定OData操作(通过
WebInvoke
)和OData函数(通过WebGet
)的API。因此,OData操作和功能都是由WCF数据服务“服务操作”实现的——这些概念并不冲突。你的回答也让它听起来像(无副作用)功能可以实现动作所能做到的一切,这是不正确的。在查询字符串中携带大量数据也是非常错误的。我似乎找不到你提到的反对通知。