[英]How to return HTTP 204 response on successful DELETE with ServiceStack
我在使用ServiceStack返回沒有正文的HTTP 204時遇到問題
如果我回來:
return new HttpResult() {
StatusCode = HttpStatusCode.NoContent
};
第一次正常運行時,但是重復調用將導致Fiddler拋出錯誤,指出最后的響應格式不正確。 我相信這是因為內容類型未顯式設置為application/json
,並且響應以空字符串或單個空格字符返回。
由於某種原因在HttpResult
對象上設置ContentType = "json"
返回HTTP 405響應。 (這是一種好奇心 - 不是我主要關注的問題)
如果返回void,則響應為我當前正在使用的HTTP 200,但我想我可以提供首選的204響應。
謝謝你的時間。
如果沒有響應,我使用簡單的響應過濾器在響應上設置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
可以防止出現此錯誤。 有關更多信息,請參見此答案 。
我通常會沿着這些方向做點什么
public void Delete(FooRequest request) {
// Perform deletion
base.Response.StatusCode = (int)HttpStatusCode.NoContent;
}
我喜歡這種方法而不是全局響應過濾器,因為這允許我在同一個地方擁有與此請求相關的所有邏輯,而不必記住我擁有的響應過濾器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.