Найдите, какой метод 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 - Селекторы операций

Другие вопросы по тегам