我在我的项目中使用第三方库名称telogis map。对于其称为群集的功能之一,无法发送请求标头。只能传递查询字符串进行聚类,API调用的整个逻辑在JS库中完成。
我的项目使用基于承载令牌的身份验证并使用Web API 2构建。要解决此问题,我已在查询字符串中传递了访问令牌,并希望验证请求。我为此创建了以下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。我使用Git Link
根据它,我必须设置由于保护级别而无法访问的actionContext.ControllerContext.RequestContext.Header
,因为它被标记为internal
。
是否还有其他解决此问题的方法,还是可以更好地完成?