0

Web API への呼び出しをインターセプトする AuthorizeAttribute クラスがあります。そこで、与えられたセッションからユーザーを検証します。

ユーザーが正しい資格情報を持っている場合、資格情報のチェック中に取得された 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属性にアクセスして from を設定しようとしているUserId場合は、おそらく苦労することになるでしょう。httpContext.ActionArguementsモデルバインディングがユーザーIDを挿入する前に、それを追加して何かを行うことができるかもしれません。

しかし、私は常に AuthorizeAttribute をゲートキーパーであり、その中にデータを設定してはならないものとして理解していました。そうは言っても、リクエストのアイテムを設定するために使用できる1つの回避策が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 に答える