Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在Web Api中为自定义请求添加承载令牌_Asp.net Mvc_Asp.net Web Api_Asp.net Identity - Fatal编程技术网

Asp.net mvc 在Web Api中为自定义请求添加承载令牌

Asp.net mvc 在Web Api中为自定义请求添加承载令牌,asp.net-mvc,asp.net-web-api,asp.net-identity,Asp.net Mvc,Asp.net Web Api,Asp.net Identity,我正在我的项目中使用第三方库名称telogis map。对于其称为集群的功能之一,不可能发送请求头。只能为集群传递查询字符串,API调用的整个逻辑在JS库中完成 我的项目使用基于承载令牌的身份验证,并使用WebAPI2构建。为了解决这个问题,我在查询字符串中传递了访问令牌,并希望验证请求。我为此创建了以下CustomAuthorize属性: public class ClusterRequestAuthorizeAttribute : AuthorizeAttribute {

我正在我的项目中使用第三方库名称telogis map。对于其称为集群的功能之一,不可能发送请求头。只能为集群传递查询字符串,API调用的整个逻辑在JS库中完成

我的项目使用基于承载令牌的身份验证,并使用WebAPI2构建。为了解决这个问题,我在查询字符串中传递了访问令牌,并希望验证请求。我为此创建了以下CustomAuthorize属性:

public class ClusterRequestAuthorizeAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            base.OnAuthorization(actionContext);
        }

        public override Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
        {
            string accessToken = actionContext.Request.GetQueryNameValuePairs().Where(w => w.Key == "access_token").Select(w => w.Value).DefaultIfEmpty().FirstOrDefault();
            actionContext.Request.Headers.Remove("Authorization");
            actionContext.Request.Headers.Add("Authorization", accessToken);

            actionContext.ControllerContext.Request.Headers.Remove("Authorization");
            actionContext.ControllerContext.Request.Headers.Add("Authorization", accessToken);

            HttpContext.Current.Request.Headers.Remove("Authorization");
            HttpContext.Current.Request.Headers.Add("Authorization", accessToken);

            return base.OnAuthorizationAsync(actionContext, cancellationToken);
        }

        protected override bool IsAuthorized(HttpActionContext actionContext)
        {
            return base.IsAuthorized(actionContext);
        }
    }
但是,
IsAuthorized
总是返回false。我使用

根据它,我必须设置
actionContext.ControllerContext.RequestContext.Header
,由于保护级别,它被标记为
internal
,因此无法访问


这个问题还有其他解决办法吗?或者可以用更好的方式解决吗?

为什么不删除该功能的[授权]?通过这种方式,您将输入方法,并在那里检查是否允许或拒绝访问的查询字符串。@RuardvanElburg:这就是我想要实现的目标。但是如何从访问令牌(即UserId)获取用户详细信息。我想通过用户id查询数据。你能提供详细信息吗?我想你可以在这里找到答案: