我正在为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);在类级别的方法之外的行。为什么要在类级而不是方法中处理对象?
答案 0 :(得分:1)
您可以使用Request.CreateResponse而不是使用新HttpResponseMessage的构造函数。由于某些原因,请参阅此接受的答案:When Use HttpResponseMessage and Request.CreateResponse
我在使用这种方法时从未见过CA2000。