加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – User.Identity.GetUserId()方法无法在Web Api 2 Cont

发布时间:2020-12-15 19:52:06 所属栏目:asp.Net 来源:网络整理
导读:在常规控制器中,以下代码有效: [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
在常规控制器中,以下代码有效:
[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中,name和id字符串为空:

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

任何人都可以告诉我为什么GetUserId()在普通控制器中工作但不在
API?在这两种情况下,我都登录了,GlobalConfiguration.Configure(WebApiConfig.Register);在Global.asax.cs的Application_Start()中添加.

我有另一个问题.如果我用[Authorize]属性装饰我的api控制器,我甚至无法访问我的api.当我已登录时,邮递员会将我引导至登录页面.

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

解决方法

NKosi是对的.这个问题让我感到难过,直到我读到他的评论.

如果您的情况与我的情况类似,那么您需要为WebAPI控制器的所有经过身份验证的请求设置承载令牌. MVC控制器使用cookie身份验证,它已经单独设置并且可以工作.但是对于WebAPI控制器,显然我们需要做更多的工作.

在我的默认“个人用户帐户”WebAPI项目中,我看到默认情况下已设置会话存储变量“accessToken”.我所要做的就是从该会话存储变量中读取它,并确保从我的客户端到WebAPI控制器的每个请求都将“授权”标头设置为“承载[您的身份验证令牌]”.

从http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api开始,这就是对WebAPI控制器的’Get’请求应该是什么样子.请注意“授权:”属性.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读