簡體   English   中英

如何使用ServiceStack成功DELETE返回HTTP 204響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM