控制器

时间:2017-02-02 19:15:39

标签: c# asp.net .net asp.net-web-api dispose

我正在为SPA应用程序开发Web API。我试图弄清楚如何在我的一个控制器中摆脱CA2000警告。以下代码生成CA2000警告 -

    [Route("Execution/TestCaseOrExecutionExcelExport")]
    [HttpPost]
    public HttpResponseMessage GetTestCaseOrExecutionExcelExport([FromBody] dynamic data)
    {
            HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);

        using (result)
        {
            ...
            result.Headers.AcceptRanges.Add("bytes");
            result.Content = new ByteArrayContent(bytes);
            result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
            result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = filename };
        }
            return result;
    }

如果我按如下所示更改上述内容,则会出现“Not all paths return a value”错误,因为该函数返回HttpResponseMessage -

    [Route("Execution/TestCaseOrExecutionExcelExport")]
    [HttpPost]
    public HttpResponseMessage GetTestCaseOrExecutionExcelExport([FromBody] dynamic data)
    {
  using (HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK))
        {    
             ...
             return result;
        }
     }

另外注意,下面的代码给出错误“无法访问已处置的对象”。但确实摆脱了ca2000警告 -

   [Route("Execution/TestCaseOrExecutionExcelExport")]
    [HttpPost]
    public HttpResponseMessage GetTestCaseOrExecutionExcelExport([FromBody] dynamic data)
    {
        using (result = new HttpResponseMessage(HttpStatusCode.OK))
        {
    ...
    }
    return result;
}

尝试没有太多运气的东西。

如何对此进行编码以消除CA2000警告?

**更新:修正了这个问题,我不知道为什么我的问题解决了我的问题。我唯一做的就是移动HttpResponseMessage结果= new HttpResponseMessage(HttpStatusCode.OK);在类级别的方法之外的行。为什么要在类级而不是方法中处理对象?

1 个答案:

答案 0 :(得分:1)

您可以使用Request.CreateResponse而不是使用新HttpResponseMessage的构造函数。由于某些原因,请参阅此接受的答案:When Use HttpResponseMessage and Request.CreateResponse

我在使用这种方法时从未见过CA2000。