在常规 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.cs
的 Application_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/