控制器中没有IP主用户信息

本文关键字:用户 信息 IP 控制器 | 更新日期: 2023-09-27 18:19:31

我有一个基本的Web API服务,其中有一个继承自ApiController的控制器。我已经读到我应该能够使用ApiController.User来获得当前已验证的用户IPrincipal用户对象。但是,当我在构造函数中尝试以下操作时,User为空,没有任何Principal详细信息。

[InjectionConstructor]
        public CloudConfigValueController(IDataModelConverter dataModelConverter, IBusinessModelConverter businessModelConverter, ILogger logger)
        {
            var u = User;
            _businessModelConverter = businessModelConverter;
            _dataModelConverter = dataModelConverter;
            _logger = logger;
        }

我的web.config

 <system.web>
    <authentication mode="Windows" />
    <identity impersonate="true"/>

那么,为什么我的控制器中没有身份信息呢?

注意:出于兴趣,我还尝试使用一个属性来验证API控制器的条目,我发现如果我深入挖掘许多层的对象,我可以找到我的windows用户名的文本表示,但没有IPrincipal。身份下面的名称包含用户名

 public override void OnAuthorization(HttpActionContext actionContext)
        {
            var wrapper = actionContext.ControllerContext.Request.Properties["MS_HttpContext"] as HttpContextWrapper;
            if (wrapper == null)
            {
                Log.InfoFormat("Could not get http context.");
                throw new AuthenticationException("Could not get authorization context");
            }
            var identity = wrapper.Request.LogonUserIdentity;
            if (identity == null)
            {
                Log.InfoFormat("Could not disover identity");
                throw new AuthenticationException("Could not get users identity");
            }
        }

控制器中没有IP主用户信息

仅供参考我确实发现了这个问题。如果您转到Web API项目的属性面板(而不是右键单击->属性),即csproj文件的属性面板,那么那里有启用windows身份验证和禁用匿名身份验证的选项。这起到了的作用