Найдите, какой метод WCF будет отправлять RESTful-запрос
Предположим, я внедряю службу 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 ответа
Несмотря на то, что другой ответ поставил меня на правильный путь, он на самом деле не ответил на мой вопрос.
Позже я нашел эту ссылку, которая дала мне рабочее решение: http://tech.blog.oceg.org/2009/04/authorizing-rest-calls-in-wcf.html
Однако я обнаружил, что это сложнее, чем нужно. В.NET 4.5 (это то, что я нахожусь) вы можете сделать следующее.
Я зарегистрировал свой ServiceAuthorizationManager из переопределения ServiceHost.ApplyConfiguration.
this.Authorization.ServiceAuthorizationManager =
new MyServiceAuthorizationManager();
Затем в его методе CheckAccessCore я вызвал метод ниже, чтобы дать мне имя метода, к которому будет отправлен запрос.
private string GetOperationName(OperationContext operationContext)
{
return messageProperties["HttpOperationName"] as string;
}
Я думаю, что вы должны использовать IDispatchOperationSelector.
Смотрите также эту статью: Расширяемость WCF - Селекторы операций