Visual studio 具有新ASP.NET Web API的主体

Visual studio 具有新ASP.NET Web API的主体,visual-studio,asp.net-web-api,visual-studio-2012,.net-4.5,Visual Studio,Asp.net Web Api,Visual Studio 2012,.net 4.5,不久前,我使用asp.NETWebAPI测试版构建了API。我在某个地方读到,当托管在IIS中时,web api从运行它的web应用程序继承标识。我的api也在一个网站上运行。使用beta二进制文件,当我登录到该站点并移动到http://localhost:4343/webui/api/values它将返回登录用户的正确值。下面是控制器的Get方法 public IQueryable<string> Get() { var pr = Reque

不久前,我使用asp.NETWebAPI测试版构建了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();
        }
public IQueryable Get()
{
var pr=Request.GetUserPrincipal();
var username=Request.GetUserPrincipal().Identity.Name;//此处安装vs 2012后出现空引用异常。即使我已登录,标识也为空
var values=GetUserValues(用户名);
返回值。AsQueryable();
}

它过去在web api的beta版本中运行良好,但在vs2012的最终版本中,它抛出了空引用异常。我已将该网站改为使用.NET4.5。知道这里发生了什么吗?

HttpRequestMessage
没有任何方法或扩展,例如
GetUserPrincipal
。我不确定beta是否有这种情况。正如我从你的问题中了解到的,你的应用程序仍在测试版上运行,这在我看来是一场彻底的灾难

当您安装VS 2012时,Web API程序集已在您的计算机上发布。所以,你很有可能在那里发生冲突

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

var principal = Thread.CurrentPrincipal;

HttpRequestMessage
没有任何方法或扩展,例如
GetUserPrincipal
。我不确定beta是否有这种情况。正如我从你的问题中了解到的,你的应用程序仍在测试版上运行,这在我看来是一场彻底的灾难

当您安装VS 2012时,Web API程序集已在您的计算机上发布。所以,你很有可能在那里发生冲突

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

var principal = Thread.CurrentPrincipal;

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

var pr = User.Identity.Name;

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

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

var pr = User.Identity.Name;

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

让我惊讶的是,VS 2012添加了
System.Net.Http.Formatting
和nuget中的一些其他程序集。我还以为他们会被愚弄,但可能不是。而
Thread.CurrentPrincipal
是我采取的路线,但我认为访问
User
属性是一种更干净的方法。令我惊讶的是,VS 2012添加了
System.Net.Http.Formatting
和来自nuget的一些其他程序集。我还以为他们会被愚弄,但可能不是。而
Thread.CurrentPrincipal
是我采取的路线,但我认为访问
User
属性是一种更干净的方法。在
DelegatingHandler
中检查身份验证后,如何设置用户属性。在beta版中,我通常编写类似于
Request.Properties[HttpPropertyKeys.UserPrincipal]=新的通用原则(…);。似乎主体已从Http属性中删除,不是吗?只是好奇,为什么要尝试设置用户属性?它是用于单元测试吗?不完全是,我需要在对用户进行身份验证后设置
Principal
对象。在
DelegatingHandler
中检查身份验证后,如何设置用户属性。在beta版中,我通常编写类似于
Request.Properties[HttpPropertyKeys.UserPrincipal]=new Generic Pricipal(…)。似乎主体已从Http属性中删除,不是吗?只是好奇,为什么要尝试设置用户属性?它是用于单元测试吗?不是,我需要在验证用户后设置
主体
对象。