ASP.NET Web Api HttpPost任务返回204而不是201

ASP.NET Web Api HttpPost任务返回204而不是201,asp.net,asp.net-mvc,asp.net-web-api,Asp.net,Asp.net Mvc,Asp.net Web Api,我正在使用ASP.NET Web Api,其中一个方法公开为POST操作。它工作正常,但返回的HTTP结果是204,而不是预期的201。以下是方法定义: [HttpPost][ActionName("Save")] public Task SaveGameState(Guid instanceId, [FromBody] ComparisonGameState state) { return gameInstancesClient.SaveGameState(instanceId, st

我正在使用ASP.NET Web Api,其中一个方法公开为POST操作。它工作正常,但返回的HTTP结果是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 };
}
[HttpPost][ActionName(“保存”)]
公共异步任务SaveGameState(Guid实例ID,[FromBody]ComparisonGameState状态)
{
等待GameInstanceClient.SaveGameState(instanceId,state);
返回新的HttpResponseMessage{StatusCode=System.Net.HttpStatusCode.Created};
}

谢谢大家!

尝试将操作定义中的任务类型更改为HttpResponseMessage的任务。在内部,WebAPI将非泛型任务视为返回void,因此它将返回一个204。如果任务返回HttpResponseMessage,请确保将返回类型更改为task of HttpResponseMessage


希望这会有所帮助。

除非有进一步的投入,否则这似乎是唯一可行的解决方案:

[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 };
}
[HttpPost][ActionName(“保存”)]
公共异步任务SaveGameState(Guid实例ID,[FromBody]ComparisonGameState状态)
{
等待GameInstanceClient.SaveGameState(instanceId,state);
返回新的HttpResponseMessage{StatusCode=System.Net.HttpStatusCode.Created};
}

那么,你是说按照我在文章中键入的第二个示例来做吗?这似乎是不必要的。如果它知道它是一个HttpPost并且没有抛出异常,它应该返回一个HttpStatusCode。是否创建了?或者你必须把它说清楚,不,阿拉什。我假设您的方法SaveGameState返回一个HttpResponseMessage任务。在这种情况下,您所要做的就是将方法签名更改为匹配。正如我所说,我发布的第一个代码片段应该可以工作,但返回204(这是不正确的行为)。第二个更详细的代码片段可以100%正常工作,但我不想用详细的方式来完成它。