繁体   English   中英

控制器中没有IPrincipal用户信息

[英]No IPrincipal user information in controller

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

[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 Controller的输入,并且发现如果深入研究许多对象层,则可以找到Windows用户名的文本表示形式,但是找不到IPrincipal。 identity.Name下面包含用户名

 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");
            }
        }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM