我配置了&使用this教程构建 WCF和oData与Visual Studio 2012 。
所以我使用 Firefox REST客户端插件来测试它是否正常工作。
这是我的基本网址,它处理json,192.168.1.4/TestdataService/TestDataService.svc/User?$format=json
我可以成功执行 GET 操作。但是我无法执行 POST,PUT&删除操作。
POST 操作说
状态代码:415不支持的媒体类型
响应正文是
{
"odata.error": {
"code": "",
"message": {
"lang": "en-US",
"value": "Unsupported media type requested."
}
}
}
PUT&删除操作说
状态代码:405方法
不允许允许:GET,POST
响应正文是
{
"odata.error": {
"code": "",
"message": {
"lang": "en-US",
"value": "The URI 'http://192.168.1.4/TestdataService/TestDataService.svc/User?$format=json' is not valid for DELETE operation. The URI must refer to a single resource from an entity set or from a property referring to a set of resources."
}
}
}
我正在附上以下屏幕截图。对此有任何帮助表示赞赏。
感谢。
获取
发表
PUT
答案 0 :(得分:7)
我认为你这里有两个无关的问题。 PUT
和DELETE
动词必须引用特定实体,而不是实体集。当您PUT
- 转到TestDataService.svc/User
时,这就像尝试更新整个实体集一样,这是不允许的。相反,您需要指定要更新的实体(例如,通过PUT
- 指向TestDataService.svc/User(0)
,或者按键查找您的实体集。)
POST
问题不同。在POST
案例中,您应该定位实体集而不是针对invidivual实体。您获得的错误与请求的Content-Type
或Accept
标头有关。就目前而言(为了简化调试),我将省略URI中的$format=json
参数,因为它会覆盖Accept
标头。请尝试在POST
请求中包含以下标头值:
Accept: application/json
Content-Type: application/json
DataServiceVersion: 3.0;
MinDataServiceVersion: 3.0;
MaxDataServiceVersion: 3.0;
如果您仍然收到错误,请告诉我们。
同样,此POST
请求应该像您原来一样转到TestDataService.svc/User
。 PUT
和DELETE
应指向各个实体(例如TestDataService.svc/User(0)
)
此外,正如qujck在上面的评论中指出的那样,在您的屏幕截图中,PUT和POST的请求正文为空。 POST表示“插入此条目”,因此您需要提供一个要插入到请求正文中的条目。 PUT表示“替换/更新此条目”,因此在这种情况下您还需要向服务器提供数据。