2

私はAuthorizeAttribute、MVC のようなものを探しています。次のように使用できます。

    [WebGet(UriTemplate = "data/{spageNumber}")]
    [WebCache(CacheProfileName = "SampleProfile")]
    [WcfAuthorize]
    public IEnumerable<SampleItem> GetCollection(String spageNumber)
    {
        Int32 itemsPerPage = 10;
        Int32 pageNumber = Int32.Parse(spageNumber);
        return Enumerable.Range(pageNumber * itemsPerPage, itemsPerPage)
                         .Select(i => SampleItem.Create(i));
    }

そのWcfAuthorizeAttributeは、FormsAuthentication でユーザーを認証しようとし、コンテキストの IPrincipal を設定するか、HTTP 401 Unauthorized を返します。

を試してみましたIOperationBehaviorが、属性を設定したメソッドではなく、最初のメソッドで実行されます。

これを WCF REST でどのように実現できますか?

よろしく。

PS: スターター キットで RequestInterceptor の例を見たことがありますが、私が望むのは一部のメソッドのみに配置することです。この例は、すべての操作で実行するフィルターのように見えます。

4

1 に答える 1

1

これを実現するためにAOPを使用できます。この機能を実現するために、 PostSharpを AOP ツールとして使用しました。また、ウェブサイトでサンプルを見つけることもできます。OnMethodEntryはメソッド (この属性で装飾されている) が実行される前に実行され、そこで検証を実行できます。

これをテストするために簡単なサンプルを作成しましたが、うまくいきました。

[Serializable]
[ProvideAspectRole(StandardRoles.Security)]
public class WcfAuthorizeAttribute : OnMethodBoundaryAspect
{
    public override void OnEntry(MethodExecutionArgs args)
    {
        //extract forms authentication token here from the request and perform validation.
    }
}

そして、以下のように WCF メソッドを装飾できます。

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Service1
{
    [WcfAuthorize]
    [WebGet(UriTemplate = "")]
    public List<SampleItem> GetCollection()
    {
        return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } };
    }
于 2012-04-06T18:07:51.850 に答える