2012-11-13 86 views
0

我正在使用ASP.NET Web Api,並且其中一種方法作爲POST操作公開。它工作正常,但它會返回204結果而不是201預期的HTTP結果。這裏是方法定義:ASP.NET Web Api HttpPost任務返回204而不是201

[HttpPost][ActionName("Save")] 
public Task SaveGameState(Guid instanceId, [FromBody] ComparisonGameState state) 
{ 
    return gameInstancesClient.SaveGameState(instanceId, state); 
} 

它是否返回混淆Web API的任務?

我所能做的,而不是下面的,但它似乎是矯枉過正:

[HttpPost][ActionName("Save")] 
public async Task<HttpResponseMessage> SaveGameState(Guid instanceId, [FromBody] ComparisonGameState state) 
{ 
    await gameInstancesClient.SaveGameState(instanceId, state); 
    return new HttpResponseMessage { StatusCode = System.Net.HttpStatusCode.Created }; 
} 

謝謝!

回答

0

除非進一步的輸入,這似乎是唯一可行的解​​決方案:

[HttpPost][ActionName("Save")] 
public async Task<HttpResponseMessage> SaveGameState(Guid instanceId, [FromBody] ComparisonGameState state) 
{ 
    await gameInstancesClient.SaveGameState(instanceId, state); 
    return new HttpResponseMessage { StatusCode = System.Net.HttpStatusCode.Created }; 
} 
0

嘗試將您的操作定義中的任務類型更改爲HttpResponseMessage的任務。在內部,WebAPI將一個非通用任務視爲返回無效,所以它返回204.如果任務返回HttpResponseMessage,請確保將返回類型更改爲HttpResponseMessage的任務。

希望有所幫助。

+0

所以,你說該怎麼辦我輸入的在後第二個例子嗎?看起來它*應該*是不必要的。如果它知道它是一個HttpPost並且它不會拋出異常,它應該返回一個HttpStatusCode.Created yes?或者你必須明確說明。 – Arash

+0

不是Arash。我認爲你的方法SaveGameState返回一個HttpResponseMessage的任務。在這種情況下,你所要做的就是改變方法簽名來匹配。 –

+0

嗨Youssef,我完全被你推薦的東西搞糊塗了。正如我所說,我發佈的第一個代碼片段*應該*工作,但返回204(這是不正確的行爲)。第二個更詳細的代碼片段可以100%正常工作,但是我不想用冗長的方式來完成。 – Arash

相關問題