假设我使用以下合同实施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将调用的方法的签名?
答案 0 :(得分:1)
答案 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;
}