gpt4 book ai didi

asp.net - User.Identity.GetUserId() 方法在 Web Api 2 Controller 中不起作用

转载 作者:行者123 更新时间:2023-12-02 14:56:05 24 4
gpt4 key购买 nike

在常规 Controller 中,以下代码有效:

[HttpPost]
public ActionResult Custom()
{
string name = User.Identity.GetUserName();
string id = User.Identity.GetUserId();
return Content(string.Format("Name:{0} </br> ID: {1}",name, id));
}

在 Web Api 2 Controller 中,名称和 id 字符串为空:

[HttpPost]
public IHttpActionResult Test()
{
string name = User.Identity.GetUserName();
string id = User.Identity.GetUserId();
return Ok();
}

谁能告诉我为什么 GetUserId() 在普通 Controller 中有效,但在阿皮?在这两种情况下,我都已登录,并且 GlobalConfiguration.Configure(WebApiConfig.Register); 添加到 Global.asax.csApplication_Start() 中>.

我还有另一个问题。如果我用 [Authorize] 属性装饰我的 api Controller ,我什至无法访问我的 api。当我已经登录时, postman 将引导我进入登录页面。

[[Authorize]]
public class TestController : ApiController
{
....

最佳答案

NKosi 是正确的。这个问题让我困惑了一段时间,直到我读到了他的评论。

如果您的情况与我的情况一样,那么您需要为 WebAPI Controller 的所有经过身份验证的请求设置承载 token 。 MVC Controller 使用 cookie 身份验证,该身份验证已单独设置并有效。但对于 WebAPI Controller ,显然我们还需要做更多的跑腿工作。

在我的默认“个人用户帐户”WebAPI 项目中,我看到 session 存储变量“accessToken”已默认设置。我所要做的就是从该 session 存储变量中读取它,并确保从客户端到 WebAPI Controller 的每个请求都将“Authorization” header 设置为“Bearer [您的身份验证 token ]”。

来自,http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api ,这就是对 WebAPI Controller 的“获取”请求应该是什么样子。请注意“授权:”属性。

GET https://localhost:44305/api/values/1 HTTP/1.1
Host: localhost:44305
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0
Accept: */*
Authorization: Bearer imSXTs2OqSrGWzsFQhIXziFCO3rF...
X-Requested-With: XMLHttpRequest

关于asp.net - User.Identity.GetUserId() 方法在 Web Api 2 Controller 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38461321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com