如何在使用ServiceStack成功DELETE时返回HTTP 204响应
本文关键字:返回 HTTP 响应 DELETE 成功 ServiceStack | 更新日期: 2023-09-27 18:17:40
我使用ServiceStack返回没有正文的HTTP 204时遇到问题
如果返回:
return new HttpResult() {
StatusCode = HttpStatusCode.NoContent
};
第一次它工作得很好,但是重复调用会导致Fiddler抛出一个错误,指出最后一个响应没有正确形成。我认为这是因为内容类型没有显式设置为application/json
,并且响应返回一个空字符串或单个空格字符。
由于某种原因在HttpResult
对象上设置ContentType = "json"
返回HTTP 405响应。(这是一个次要的好奇心-不是我主要关心的)
如果我返回void,那么响应是HTTP 200,我目前正在使用,但我想我可以提供首选的204响应。
感谢您的宝贵时间。
我通常是这样做的
public void Delete(FooRequest request) {
// Perform deletion
base.Response.StatusCode = (int)HttpStatusCode.NoContent;
}
我喜欢这种方法,而不是全局响应过滤器,因为它允许我在同一个地方拥有与此请求相关的所有逻辑,而不必记住我有哪些响应过滤器。
如果没有响应,我使用一个简单的响应过滤器来设置响应上的No Content
标头。
设置AppHost
Configure
方法中的过滤器:
GlobalResponseFilters.Add((req, res, obj) => {
// Handle void responses
if(obj == null && res.StatusCode == 200)
{
res.StatusCode = (int)HttpStatusCode.NoContent;
res.StatusDescription = "No Content";
}
});
那么当一个方法返回void
时,正确的头将被设置。
public void Delete(TestRequest request)
{
// I don't return anything
}
关于JSON的405
错误响应。只有在发送空响应和状态200
时才会发生这种情况,因为这是格式错误的JSON。但是发送上面的204 No Content
将防止这个错误。