我的所有Wep Api 2控制器上的Options()动词出现CA2000错误。
在方法'PromotionController.Options()'中,对象'<> g__initLocal0'未沿所有异常路径布置。
我需要支持跨域ajax调用的飞行前请求,所以我所做的就是返回In [128]: RSS_min = RSS[ij_min]
In [129]: RSS_min
Out[129]: 8
,以便后续的post / put / delete将会启动。
HttpStatusCode.Ok
我尝试过这样的using语句:
public HttpResponseMessage Options()
{
return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
}
但是当我使用邮递员的选项请求点击它时,我得到一个例外:
无法访问已处置的对象。\ r \ n对象名称:'System.Net.Http.HttpResponseMessage'。
如何以不会引发代码分析错误的方式返回public HttpResponseMessage Options()
{
using(var response = new HttpResponseMessage())
{
response.StatusCode = HttpStatusCode.OK;
return response;
}
}
?
谢谢!
答案 0 :(得分:2)
关于访问已处置对象的异常是显而易见的,因为当执行离开using
块时,response
被释放,但您将其从using
块中退出并退出方法。您无法在方法之外访问该对象,因为它根本不存在。
通常,要解决 CA2000 警告,只需在您不再需要它时明确地处理HttpResponseMessage
类的实例。
在您的情况下,解决方案可能是覆盖Dispose
method of your controller (实施ApiController
方法)和明确处理您的实例。检查例如this question。
您也可以禁止警告,然后垃圾收集器将稍后处理实例。但这不是一个合适的解决方案。
答案 1 :(得分:1)
您可以使用HttpRequestMessage
类RegisterForDispose
方法注册响应对象以进行处置。 .Net的基础设施将在处理完请求后处理所有注册对象。
我无法保证您之后不会收到错误,但会丢弃该对象以便您可以抑制错误。
示例强>:
HttpResponseMessage response = Request.CreateResponse();
// Do what you need with response
// ...
// ...
request.RegisterForDispose(response);// response will be disposed by host