Я тоже столкнулся с этой проблемой и в итоге нашел другое решение. Я не хотел иметь разные методы для каждого свойства объекта.
То, что я сделал, было следующим:
Определите шаблон URL в контракте на обслуживание, не задавая параметры строки запроса:
[WebGet(UriTemplate = "/People?")]
[OperationContract]
List<Person> GetPersonByParams();
Затем в реализации получите доступ к любым допустимым параметрам строки запроса:
public List<Person> GetPersonByParms()
{
PersonParams options= null;
if (WebOperationContext.Current != null)
{
options= new PersonParams();
options.ssn= WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["ssn"];
options.driversLicense = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["driversLicense"];
options.YearOfBirth = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["YearOfBirth"];
}
return _repository.GetPersonByProperties(options);
}
Затем вы можете искать, используя URL-адреса, такие как
/PersonService.svc/People
/PersonService.svc/People?ssn=5552
/PersonService.svc/People?ssn=5552&driversLicense=123456
Он также позволяет вам смешивать и сопоставлять параметры строки запроса, поэтому просто используйте то, что вы хотите, и пропустите любые другие параметры, которые вас не интересуют. Преимущество состоит в том, что вы не ограничены одним параметром запроса.