获取HttpContext.Current.User.Identity.Name时资源泄漏

时间:2015-05-08 03:43:08

标签: asp.net c#-4.0 asp.net-web-api memory-leaks coverity

我使用HttpContext检索即将发出的HTTP请求的当前用户名,但是在运行覆盖率分析时,它会报告资源泄漏。

    public class UsersController:ApiController
    {
      private string userName;
      public UsersController()
      {
        if (HttpContext.Current != null)
        {
            userName = HttpContext.Current.User.Identity.Name;
        }
    }
    //I defined customized identity
    public class MyIdentity : IIdentity
    {
        private string name;
        public string AuthenticationType
        {
            get { return "Custom"; }
        }

        public bool IsAuthenticated
        {
            get { return true; }

        }

        public string Name { get; set; }

 }

在Coverity报告中,它说 2. alloc_fn:从分配方法Identity.get返回一个新资源。 (虚拟调用解析为System.Security.Claims.ClaimsPrincipal.Identity.get。) 3. noescape:资源System.Web.HttpContext.Current.User.Identity未在Name.get中关闭或保存。 (虚拟调用解析为Org.Abc.HttpModules.MyIdentity.Name.get。)

CID 51307:资源泄漏(RESOURCE_LEAK) 4. leaked_resource:无法保存或关闭由System.Web.HttpContext.Current.User.Identity创建的资源泄漏它。

1 个答案:

答案 0 :(得分:0)

IIdentity由WindowsIdentity实施。 WindowsIdentity还实现了IDisposable,因此需要在创建后进行处理。您可以通过调用Dispose方法来完成此操作。

但是,由于您使用自己的IIdentity实现,我认为这里的问题是Coverity不确定该身份是否是一次性的,因此谨慎行事。