C# 如何在webapi中访问用户标识

C# 如何在webapi中访问用户标识,c#,asp.net-mvc,asp.net-web-api,asp.net-web-api2,C#,Asp.net Mvc,Asp.net Web Api,Asp.net Web Api2,我在MVC应用程序中使用web Api,我想通过以下代码在Api中获得用户身份: User.Identity.Name 但它不工作,虽然,它在其他地方工作得很好,如控制器 有没有从Web API访问User.Identity.Name的解决方案?这是一个常见的混淆。在MVC中进行身份验证对您在Web Api中的身份验证状态没有任何影响。WebAPI是REST兼容的,这意味着它是无状态的——没有会话 当您在MVC端进行身份验证时,会向用户的浏览器中添加一个带有身份验证令牌的cookie,该令牌对

我在MVC应用程序中使用web Api,我想通过以下代码在Api中获得用户身份:

User.Identity.Name
但它不工作,虽然,它在其他地方工作得很好,如控制器


有没有从Web API访问User.Identity.Name的解决方案?

这是一个常见的混淆。在MVC中进行身份验证对您在Web Api中的身份验证状态没有任何影响。WebAPI是REST兼容的,这意味着它是无状态的——没有会话

当您在MVC端进行身份验证时,会向用户的浏览器中添加一个带有身份验证令牌的cookie,该令牌对应于应用程序会话状态下的活动身份验证(这里我不是说
session
,因为身份验证不使用该令牌,但它仍在使用会话)。然后,在每个后续请求中,浏览器将此cookie传递回服务器,服务器将验证身份验证令牌并恢复用户的“登录”状态


在WebAPI中,这些都不会发生。对Web Api的每个请求必须包含处理该请求所需的所有信息。对以前发生的事一无所知。因此,如果需要授权Web Api请求,则必须随请求一起传递身份验证令牌,通常在请求头中传递。否则,您将无法通过身份验证,User.Indentity.Name将为空,因为您是匿名的。

请尝试使用ApiController属性User。检查一下:在WebAPI2中,它被更改为ApiController.User属性或RequestContext.Principal——它们是相同的。注意,这可能是空的。