2013-04-15 65 views
1

我已配置&内置WCF和oData与Visual Studio 2012使用this教程。OData&WCF:无法执行POST,PUT和DELETE

所以我用Firefox REST客户端插件来测试它的工作是否正常。

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

我可以做顺利拿到操作。但是我无法执行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." 
    } 
    } 
} 

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

谢谢。

GET enter image description here

POST 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

+0

你能展示一个关于put/post请求的消息体的例子吗? – qujck

+0

一分钟....,。 –

+0

@qujck:我已经加入邮件正文的屏幕截图.. –

回答

6

我认为你有两个无关的问题在这里。 PUTDELETE动词必须涉及特定的实体,而不是实体集。当你是PUT -ting到TestDataService.svc/User时,这就像试图更新整个实体集合,这是不允许的。相反,您需要指定要更新的实体(例如,PUT -ting至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/User,像你这样的原本。 PUTDELETE和应指向个别实体(例如,TestDataService.svc/User(0)

此外,如在qujck评论指出如上所述,在你的屏幕截图,用于PUT和POST请求体是空的。 POST的意思是“插入这个条目”,所以你需要提供一个条目插入请求的主体。 PUT的意思是“替换/更新这个条目”,所以你也需要在这种情况下向服务器提供数据。

+0

谢谢为了解释Post和Put之间的区别,我不知道前者是以收藏为目标,后者是个人实体 –

相关问题