如何在我的 Web Api 方法中处理 HttpResponseMessage?
How do I Dispose a HttpResponseMessage in my Web Api Method?
我的所有 Wep Api 2 控制器上的 Options() 动词都出现 CA2000 错误。
In method 'PromotionController.Options()', object '<>g__initLocal0' is not disposed along all exception paths.
我需要支持跨域 ajax 调用的飞行前请求,所以我所做的只是 returning HttpStatusCode.Ok
以便后续 post/put/delete 会开火。
public HttpResponseMessage Options()
{
return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
}
我试过这样的using语句:
public HttpResponseMessage Options()
{
using(var response = new HttpResponseMessage())
{
response.StatusCode = HttpStatusCode.OK;
return response;
}
}
但是当我用 Postman 的 Options 请求点击它时,我得到一个异常:
Cannot access a disposed object.\r\nObject name: 'System.Net.Http.HttpResponseMessage'.
如何 return HttpStatusCode.Ok
不会引发代码分析错误?
谢谢!
关于访问已处置对象的异常是显而易见的,因为当执行离开 using
块时,response
已被处置,但您将它从 using
块中返回并退出的方法。您不能在方法之外访问该对象,因为它根本不存在了。
通常,要解决 CA2000 警告,只需在不再需要时显式处理 HttpResponseMessage
class 的实例即可。
在您的情况下,解决方案可能是 覆盖 Dispose
method of your controller (implements the ApiController
method) and explicitly dispose your instances there. Check for example this question。
您也可以只取消警告,垃圾收集器稍后会处理实例。但这不是一个合适的解决方案。
您可以使用HttpRequestMessage
class 的RegisterForDispose
方法注册用于处理的响应对象。 .Net 的基础结构将在处理请求后处理所有已注册的对象。
我不能保证您之后不会收到错误,但该对象将被释放,以便您可以抑制错误。
示例:
HttpResponseMessage response = Request.CreateResponse();
// Do what you need with response
// ...
// ...
request.RegisterForDispose(response);// response will be disposed by host
我的所有 Wep Api 2 控制器上的 Options() 动词都出现 CA2000 错误。
In method 'PromotionController.Options()', object '<>g__initLocal0' is not disposed along all exception paths.
我需要支持跨域 ajax 调用的飞行前请求,所以我所做的只是 returning HttpStatusCode.Ok
以便后续 post/put/delete 会开火。
public HttpResponseMessage Options()
{
return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
}
我试过这样的using语句:
public HttpResponseMessage Options()
{
using(var response = new HttpResponseMessage())
{
response.StatusCode = HttpStatusCode.OK;
return response;
}
}
但是当我用 Postman 的 Options 请求点击它时,我得到一个异常:
Cannot access a disposed object.\r\nObject name: 'System.Net.Http.HttpResponseMessage'.
如何 return HttpStatusCode.Ok
不会引发代码分析错误?
谢谢!
关于访问已处置对象的异常是显而易见的,因为当执行离开 using
块时,response
已被处置,但您将它从 using
块中返回并退出的方法。您不能在方法之外访问该对象,因为它根本不存在了。
通常,要解决 CA2000 警告,只需在不再需要时显式处理 HttpResponseMessage
class 的实例即可。
在您的情况下,解决方案可能是 覆盖 Dispose
method of your controller (implements the ApiController
method) and explicitly dispose your instances there. Check for example this question。
您也可以只取消警告,垃圾收集器稍后会处理实例。但这不是一个合适的解决方案。
您可以使用HttpRequestMessage
class 的RegisterForDispose
方法注册用于处理的响应对象。 .Net 的基础结构将在处理请求后处理所有已注册的对象。
我不能保证您之后不会收到错误,但该对象将被释放,以便您可以抑制错误。
示例:
HttpResponseMessage response = Request.CreateResponse();
// Do what you need with response
// ...
// ...
request.RegisterForDispose(response);// response will be disposed by host