0

我有一个 AuthorizeAttribute 类来拦截对我的 Web Api 的调用。在那里,我从给定的会话中验证用户。

如果用户拥有正确的凭据,我想在请求正文中附加在凭据检查期间获取的 userId。我尝试了一些东西,但似乎我无法访问 IsAuthorized 中的请求正文?

我正在尝试做这样的事情:

public class AuthorizeUserAttribute : AuthorizeAttribute
{
    protected override bool IsAuthorized(HttpActionContext httpContext)
    {
        // Pick up session
        var sessionKey = httpContext.Request.Headers.FirstOrDefault(h => h.Key == "session").Value;

        // If session vas valid, get userid from session and add it to the request body somehow
        // so the controller gets userid attached.

        return true;
    }
} 

之后,目标控制器被调用:

public Response GetCandy( CandyRequest candy )
{
    // Wohoo, the user was accepted and i've got the user id already in the argument object.
    var userId = candy.UserId;
}
4

1 回答 1

1

我不确定我是否完全理解你在这里寻找的东西。如果您尝试访问candy并设置UserId属性中的 from,您可能会遇到困难。httpContext.ActionArguements在模型绑定碰巧注入您的用户 ID 之前,您也许可以添加它来做一些事情。

但是,我一直将 AuthorizeAttribute 理解为一个看门人,不应该在其中设置数据。话虽如此,您可以使用一种解决方法HttpContext.Items来设置请求的项目,因此您的结果代码看起来像

protected override bool IsAuthorized(HttpActionContext httpContext)
{
    // code to map the session to the user.

    HttpContext.Current.Items["UserId"] = 23423; // set the user id to the Items collection

    return true;
}

然后在你的控制器中

public Response GetCandy( CandyRequest candy )
{
    // Wohoo, the user was accepted and i've got the user id already in the argument object.
    var userId = HttpContext.Items["UserId"];
}
于 2013-10-01T20:32:39.177 回答