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

标签 asp.net asp.net-mvc asp.net-web-api

在常规 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/

相关文章:

c# - ASP.NET Core MVC 中的 Crystal Reports 错误。无法加载文件

security - 如何从 RESTful 服务发送安全 token ?

asp.net - 如何在 ASP.Net 应用程序中设置默认时区

asp.net - 如何组织和操作文件系统中的图片?

asp.net-mvc - 从 ASP.NET MVC 中的部分 View 中删除逻辑

c# - 将变量传递给验证器

angular - 如何将 Angular 4 Web 应用程序连接到移动摄像头?

c# - Web API - 事件通知

c# - 调整图像大小而不保存在磁盘上

javascript - 在Asp.net Mvc中隐藏字段值无法访问