OData& WCF:无法执行POST,PUT&删除

时间:2013-04-15 08:17:46

标签: c# wcf visual-studio wcf-data-services odata

我配置了&使用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."
    }
  }
}

我正在附上以下屏幕截图。对此有任何帮助表示赞赏。

感谢。

获取 enter image description here

发表 enter image description here

enter image description here

enter image description here

PUT enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:7)

我认为你这里有两个无关的问题。 PUTDELETE动词必须引用特定实体,而不是实体集。当您PUT - 转到TestDataService.svc/User时,这就像尝试更新整个实体集一样,这是不允许的。相反,您需要指定要更新的实体(例如,通过PUT - 指向TestDataService.svc/User(0),或者按键查找您的实体集。)

POST问题不同。在POST案例中,您应该定位实体集而不是针对invidivual实体。您获得的错误与请求的Content-TypeAccept标头有关。就目前而言(为了简化调试),我将省略URI中的$format=json参数,因为它会覆盖Accept标头。请尝试在POST请求中包含以下标头值:

Accept: application/json
Content-Type: application/json
DataServiceVersion: 3.0;
MinDataServiceVersion: 3.0;
MaxDataServiceVersion: 3.0;

如果您仍然收到错误,请告诉我们。

同样,此POST请求应该像您原来一样转到TestDataService.svc/UserPUTDELETE应指向各个实体(例如TestDataService.svc/User(0)

此外,正如qujck在上面的评论中指出的那样,在您的屏幕截图中,PUT和POST的请求正文为空。 POST表示“插入此条目”,因此您需要提供一个要插入到请求正文中的条目。 PUT表示“替换/更新此条目”,因此在这种情况下您还需要向服务器提供数据。