You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将C# MVC项目从EF 4.7.2升级到.NET Core 8.0后编译报错

解决.NET Core 8.0中OperationContext无ServiceSecurityContext的问题

问题原因

在.NET Framework中,OperationContext.Current直接包含ServiceSecurityContext属性,但.NET Core/.NET 5+将WCF相关API拆分到独立NuGet包中,原属性被替换为扩展方法,需引入特定包才能使用。

解决方案

  1. 安装必要的NuGet包
    使用.NET CLI执行以下命令安装System.ServiceModel.Security包:

    dotnet add package System.ServiceModel.Security
    

    也可在NuGet包管理器中搜索并安装该包。

  2. 修改代码逻辑
    原直接访问ServiceSecurityContext属性的方式需替换为调用GetServiceSecurityContext()扩展方法,同时添加空值判断避免异常:

    using System.Security.Principal;
    using System.ServiceModel;
    using System.ServiceModel.Security; // 新增该using指令
    
    if (OperationContext.Current != null)
    {
        var securityContext = OperationContext.Current.GetServiceSecurityContext();
        if (securityContext != null)
        {
            if (!string.IsNullOrEmpty(securityContext.WindowsIdentity?.Name))
            {
                return securityContext.WindowsIdentity.Name;
            }
    
            if (!string.IsNullOrEmpty(securityContext.PrimaryIdentity?.Name))
            {
                return securityContext.PrimaryIdentity.Name;
            }
        }
    }
    

关键说明

  • .NET Core/.NET 8中WCF的安全上下文相关API不再内置,必须通过NuGet包引入。
  • GetServiceSecurityContext()是OperationContext的扩展方法,定义在System.ServiceModel.Security命名空间下,因此必须添加对应的using指令。
  • 新增WindowsIdentity?.的空值判断,因为在非Windows环境或未启用Windows身份验证的场景下,WindowsIdentity可能为null,避免空引用异常。

内容的提问来源于stack exchange,提问作者user23750585

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:32:17