регистрация маршрутов wcf web api - PullRequest
0 голосов
/ 08 ноября 2011

У меня проблема с API, который я сейчас разрабатываю с WCF Web Api, вот что:

Я хочу зарегистрировать несколько классов ресурсов в качестве сервисных контрактов.Итак, у меня есть RootResource, из которого я могу получить доступ к ChildResource1, ChildResource2, ChildResourceN.

По сути, я хочу выполнить серию операций http со следующей структурой маршрута:

  1. GET / RootResource / {RootResouceId} / ChildResourceN / {ChildResourceNId} (это приведет к получению N-го ChildResource из RootResource)

Моя текущая регистрация ресурса:

routes.MapServiceRoute<ChildResource1>("RootResource");

А моя операция в ресурсе аннотируется следующим образом:

[WebGet(UriTemplate = "{RootResouceId}/ChildResource1/{ChildResource1Id}")]

Однако этот подход мне не удобен, потому что все мои маршруты должны иметь одинаковый шаблон,один, о котором я упоминал выше.

Если я хочу зарегистрировать другой ресурс сейчас, чтобы, скажем, ChildResource2, то:

routes.MapServiceRoute<ChildResource2>("RootResource");

Обратите внимание, что базовый маршрут такой же, и WCF Web Api не 'Я не могу этого допустить.

1 Ответ

1 голос
/ 08 ноября 2011

«RootResource», переданный в MapServiceRoute (), должен соответствовать одному типу, указанному в T. Поэтому, если вы хотите использовать схему при описании, вам нужно будет создать один контракт на обслуживание и сопоставить все с этим контрактом на обслуживание.,Из описания я не уверен, что {RootResouceId} отображается на конкретный элемент данного типа, т.е. все типы одинаковы, и в этом случае имеет смысл поместить их в один контракт или в другие типы, и в этом случае я бы сделалэта часть службы сопоставления, то есть

routes.MapServiceRoute<ChildResource1>("RootResource/Child1");
routes.MapServiceRoute<ChildResource2>("RootResource/Child2");
...