簡體   English   中英

如何在Web Api方法中處理HttpResponseMessage?

[英]How do I Dispose a HttpResponseMessage in my Web Api Method?

我在所有Wep Api 2控制器上都遇到了Option2000()動詞的CA2000錯誤。

在方法'PromotionController.Options()'中,未沿所有異常路徑放置對象'<> g__initLocal0'。

我需要支持針對跨域Ajax調用發出的飛行前請求,因此我正在做的只是返回HttpStatusCode.Ok以便隨后的發布/發布/刪除操作將被觸發。

public HttpResponseMessage Options()
{
    return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
}

我已經嘗試過using語句,例如:

public HttpResponseMessage Options()
{
    using(var response = new HttpResponseMessage())
    {
        response.StatusCode = HttpStatusCode.OK;
        return response;
    }
}

但是當我用郵遞員的選項請求擊中它時,我得到了一個例外:

無法訪問已處置的對象。\\ r \\ n對象名稱:'System.Net.Http.HttpResponseMessage'。

如何以不會引發代碼分析錯誤的方式返回HttpStatusCode.Ok

謝謝!

關於訪問已處置對象的異常很明顯,因為當執行離開using塊時, response已處置,但是您將其從using塊和方法中返回。 您無法在方法之外訪問該對象,因為它不再存在。

通常,要解決CA2000警告,只需在不再需要HttpResponseMessage類的實例時就對其進行顯式處理。

在您的情況下,解決方案可能是重寫控制器Dispose方法 (實現ApiController方法),並在那里明確地 ApiController 您的實例 例如檢查這個問題

您還可以僅禁止顯示警告,並且無論如何該實例將在以后由垃圾收集器處理。 但這不是一個適當的解決方案。

您可以使用HttpRequestMessage類的RegisterForDispose方法RegisterForDispose要處理的響應對象。 .Net基礎結構將在處理請求后處理所有注冊的對象。

我不能保證在那之后您不會收到錯誤,但是該對象將被處置,以便您可以抑制錯誤。

范例

HttpResponseMessage response = Request.CreateResponse();
// Do what you need with response
// ...
// ...
request.RegisterForDispose(response);// response will be disposed by host

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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