OData和WCF:无法执行POST,PUT和DELETE

Sha*_* TK 1 c# wcf visual-studio wcf-data-services odata

我使用教程使用Visual Studio 2012配置并构建了WCF和oData.

所以我使用Firefox REST Client插件来测试它是否正常工作.

这是我的基本URL处理json, 192.168.1.4/TestdataService/TestDataService.svc/User?$format=json

我可以成功完成GET操作.但是我无法执行POST,PUT和DELETE操作.

POST操作说

状态代码:415不支持的媒体类型

它的响应体

 {
  "odata.error": {
    "code": "",
    "message": {
      "lang": "en-US",
      "value": "Unsupported media type requested."
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

PUT&DELETE运营说

状态代码: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."
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在附上下面的截图.对此有任何帮助表示赞赏.

谢谢.

得到 在此输入图像描述

POST 在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述

Jen*_*n S 7

我想你在这里有两个无关的问题.在PUTDELETE动词必须是指一个特定的实体,而不是一个实体集.当你PUT-ting到TestDataService.svc/User,这是喜欢尝试更新整个实体集,这是不允许的.相反,您需要指定要更新的实体(例如,通过PUT按键TestDataService.svc/User(0),或者按键查找实体集).

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

Accept: application/json
Content-Type: application/json
DataServiceVersion: 3.0;
MinDataServiceVersion: 3.0;
MaxDataServiceVersion: 3.0;
Run Code Online (Sandbox Code Playgroud)

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

同样,这个POST请求应该TestDataService.svc/User像你原来一样.PUTDELETE应指向个别实体(例如TestDataService.svc/User(0))

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