1

前段时间我使用 asp.net Web-api beta 构建了 API。我在某处读到,当托管在 IIS 中时,web-api 从运行它的 web 应用程序继承标识。我的 api 也在网站内运行。使用 beta 二进制文件,当我登录该站点然后移至该站点时http://localhost:4343/webui/api/values,将为我返回登录用户的正确值。这是Get值控制器的方法。

public IQueryable<string> Get()
        {
            var pr = Request.GetUserPrincipal();
            var username = Request.GetUserPrincipal().Identity.Name; //Null reference exception after installing vs 2012 here. Identity is null even though I am logged in 
            var values = GetUserValues(username);
            return values.AsQueryable();
        }

它曾经在 web-api 的 beta 版本中正常工作,但在 vs2012 的最终版本中它会抛出空引用异常。我已将该站点转换为使用 .net 4.5。知道这里发生了什么吗?

4

2 回答 2

5

ApiController 现在有一个名为“User”的属性,它是 IPrincipal。

var pr = User.Identity.Name;

如 tugberk 所述,在内部,User 属性调用 Thread.CurrentPrincipal。

于 2012-08-28T14:05:00.537 回答
1

HttpRequestMessage没有任何方法或扩展,例如GetUserPrincipal. 我不确定 beta 是否有。正如我从您的问题中了解到的那样,您的应用程序仍在测试版上运行,这完全是 IMO 灾难。

当您安装 VS 2012 时,Web API 程序集已在您的机器上进行了 GACed。因此,您很可能在那里发生冲突。

另一方面,您可以通过以下命令获取身份:

var principal = Thread.CurrentPrincipal;
于 2012-08-28T12:57:07.347 回答