Сопоставить параметры URI со свойствами объекта параметра? - PullRequest
5 голосов
/ 03 января 2012

Я пытаюсь создать службу WCF, которая предоставляет SOAP и конечную точку JSON.
Для сопоставления параметров URL-адреса запроса с параметрами метода я использую метод WebGetAttribute UriTemplate.

Это прекрасно работает для методов, ожидающих параметры простых типов данных.

Однако следующий метод ожидает сложный объект, и я не хочу его менять из-за SOAP-части службы:

[OperationContract]
Person Test(TestParameters parameters);

в то время как TestParameters выглядит (с большим количеством свойств):

[DataContract]
public class TestParameters
{
    [DataMember]
    public string First
    {
        get;
        set;
    }
    [DataMember]
    public string Second
    {
        get;
        set;
    }
}

При вызове метода через GET сейчас я хотел бы иметь возможность инициализировать parameters.First и parameters.Second из URI запроса, например,

/Test?first=Foo&second=Bar

Я уже пытался применить

[WebGet(UriTemplate = "/Test?first={parameters.First}&second={parameters.Second})]

к методу.
Однако этот синтаксис, похоже, неподдерживается WCF.Сообщение об ошибке гласит:

System.InvalidOperationException: Операция «Тест» в контракте «IService1» имеет UriTemplate, который ожидает параметр с именем «PARAMETERS.FIRST», но нет входного параметра с этим именемна операцию.

Существует ли какой-либо другой синтаксис, который позволяет формулировать сопоставление параметров URI со свойствами объектов параметров?

В противном случае, знаете ли вы, можно ли легко добавить это поведение?

Заранее большое спасибо за ваши ответы!

1 Ответ

1 голос
/ 03 января 2012

Вам придется прибегнуть к JSON, например, в сочетании с методом PUT или POST.См. этот пост для объяснения.

...