Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 杰达。OData v.3操作后参数接收为空_C#_Javascript_Wcf_Odata_Jaydata - Fatal编程技术网

C# 杰达。OData v.3操作后参数接收为空

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

我的OData POST操作将参数接收为null,因为它将从JayData客户端获取这些参数作为主体的一部分,并希望它们作为URI的一部分

我已经创建了一个基于和的OData服务(现在就在那里)。它有一个后置操作:

[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)
蒂亚


Raist

JayData希望立即通过
WebGet
属性发布服务操作。关于OData标准,您是对的,它确实期望URL参数中的POST操作参数,但奇怪的是,经典WCF和WebAPI都在主体中使用参数。。。这是一个标准,所以必须遵守。如果您无法使用WebGet属性,请随时提出支持调用后方法的功能:


我认为你把行动服务运营混淆了

操作可能有副作用,服务操作不得有副作用。在ODataV3.0中,服务操作被标记为遗留功能,因为功能可以实现相同的结果。请注意,函数不使用POST-它们必须使用GET方法,因此在查询字符串中传递任何参数

您最好参考完整规范的文档(在线内容不完整)

根据ODataV3.0规范,使用POST方法在请求体(而不是请求URI)中传递与操作相关的任何参数。以下是规范文档中的操作示例:

HTTP请求:

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数据服务“服务操作”实现的——这些概念并不冲突。你的回答也让它听起来像(无副作用)功能可以实现动作所能做到的一切,这是不正确的。在查询字符串中携带大量数据也是非常错误的。我似乎找不到你提到的反对通知。