2013-04-15 72 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之間的區別,我不知道前者是以收藏爲目標,後者是個人實體 –

相關問題