我在我的MVC应用程序中使用web Api,我想通过以下代码在我的api中获取用户身份:
User.Identity.Name
但它不起作用,但它在控制器等其他地方运行良好!
是否有任何解决方案可以从Web API访问User.Identity.Name?
答案 0 :(得分:9)
这是一种常见的混淆。在MVC中进行身份验证对Web Api中的身份验证状态没有任何作用。 Web Api符合REST,其中包括无状态 - 无会话。
当您在MVC端进行身份验证时,会在用户的浏览器中添加一个cookie,其中包含一个身份验证令牌,对应于应用程序会话状态中的主动身份验证(我不是在谈论Session
此处,由于auth不使用 ,但它仍在使用会话)。然后,在每个后续请求中,浏览器将此cookie传递回服务器,该服务器验证身份验证令牌并恢复用户的状态"登录"。
在Web Api中,没有发生这种情况。对Web Api的每个请求都必须包含处理该请求所需的所有信息。什么都不知道。因此,如果您需要授权Web Api请求,则必须在请求标头中传递身份验证令牌以及请求。否则,您未经过身份验证,并且User.Indentity.Name将为null,因为您是匿名的。