找到WCF将调度RESTful请求的方法

时间:2013-04-10 20:56:51

标签: wcf wcf-rest method-dispatch

假设我使用以下合同实施WCF REST服务。

[ServiceContract]
interface INotesService
{
    [OperationContract]
    [WebInvoke(Method = "GET",
        UriTemplate = "notes/{id}")]
    Note GetNote(string id);

    [OperationContract]
    [WebInvoke(Method = "GET",
        UriTemplate = "notes")]
    IEnumerable<Note> GetNotes();
}

现在,我在管道中有一个HttpModule来执行授权,但该代码需要知道请求将被分派到哪个方法。如何找到WCF将调用的方法的签名?

2 个答案:

答案 0 :(得分:1)

我认为你应该使用IDispatchOperationSelector

另见本文:WCF Extensibility – Operation Selectors

答案 1 :(得分:1)

即使另一个答案让我走上了正确的道路,但它并没有真正回答我的问题。

我后来发现这个链接给了我一个有效的解决方案: http://tech.blog.oceg.org/2009/04/authorizing-rest-calls-in-wcf.html

然而,我发现它比需要的更复杂。在.NET 4.5(我正在使用的)中,您可以执行以下操作。

我从ServiceHost.ApplyConfiguration覆盖中注册了我的ServiceAuthorizationManager。

this.Authorization.ServiceAuthorizationManager = 
       new MyServiceAuthorizationManager();

然后,在其CheckAccessCore方法中,我调用了下面的方法,为我提供了调度请求的方法的名称。

private string GetOperationName(OperationContext operationContext)
{
    return messageProperties["HttpOperationName"] as string;
}