【问题标题】:How to get cookies from HttpActionContext on AuthorizeAttribute custom class?如何从 AuthorizeAttribute 自定义类的 HttpActionContext 获取 cookie?
【发布时间】:2019-01-01 05:53:32
【问题描述】:

我正在验证存储在 cookie 上的令牌,因此我创建了一个类

public class VIEWAuthorizeAttribute : AuthorizeAttribute

然后我覆盖了 OnAuthorization 类

public override void OnAuthorization(AuthorizationContext filterContext)
{
   var cookie = filterContext.HttpContext.Request.Cookies.Get("Profile"); //This is working

   if (cookie != null && IsValidToken(cookie["Token"]))
   {
       return;
   }

   HandleUnauthorizedRequest(filterContext);
}

这适用于 MVC 控制器,但是当我尝试对 web api 控制器执行类似操作时,我无法从请求中获取 cookie。

public override void OnAuthorization(HttpActionContext actionContext)
{
    var foo = actionContext.Request.Headers.Cookies; //that is not working
    if (Authorize(actionContext))
    {
        return;
    }
    HandleUnauthorizedRequest(actionContext);
}

actionContext.Request.Headers没有Cookies的方法,我也试过actionContext.Request.Headers.GetCookies("Bar")这样answer,但是Header没有GetCookies的方法。

有什么想法吗?

【问题讨论】:

  • 您可以使用HttpContext.Current,因为我认为无法以任何其他方式访问当前上下文。出于某种原因,HttpActionContext 无法访问实际的HttpRequest
  • actionContext.Request.Headers.GetCookies 方法到底有什么问题?这个应该做的工作

标签: c# asp.net-mvc asp.net-web-api cookies


【解决方案1】:
string Authentication = string.Empty;
if (actionContext.Request.Headers.Contains("Cookie_Phone"))
{
    Authentication = actionContext.Request.Headers.GetValues("Cookie_Phone")?.FirstOrDefault();
}

【讨论】:

  • 欢迎来到 SO。请提供有关您的答案的更多信息,说明问题所在以及您的答案如何解决问题。
猜你喜欢
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
相关资源
最近更新 更多