1

我已经使用教程使用Visual Studio 2012 配置和构建了 WCF 和 oData 。

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

这是我处理 json 的基本 URL,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."
    }
  }
}

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."
    }
  }
}

我附上下面的截图。对此的任何帮助表示赞赏。

谢谢。

得到 在此处输入图像描述

邮政 在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

7

我认为您在这里有两个不相关的问题。PUTandDELETE动词必须指代一个特定的实体,而不是一个实体集。当您PUT-ting toTestDataService.svc/User时,这就像尝试更新整个实体集,这是不允许的。相反,您需要指定要更新的实体(例如,通过PUT-ting to TestDataService.svc/User(0),或者键查找您的实体集)。

POST问题是不同的。在这种POST情况下,您应该针对实体集而不是单个实体。您收到的错误与请求的Content-TypeorAccept标头有关。现在(为了简化调试),我将省略$format=jsonURI 中的参数,因为它会覆盖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 表示“替换/更新此条目”,因此在这种情况下您还需要向服务器提供数据。

于 2013-04-15T17:25:29.737 回答