Регистрация маршрутов wcf web api
У меня проблема с Api, который я сейчас разрабатываю с помощью WCF Web Api, вот что:
Я хочу зарегистрировать несколько классов ресурсов в качестве сервисных контрактов. Итак, у меня есть RootResource, из которого я могу получить доступ к ChildResource1, ChildResource2, ChildResourceN.
По сути, я хочу выполнить серию http-операций со следующей структурой маршрута:
- 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 ответ
"RootResource", передаваемый в MapServiceRoute(), должен отображаться на один тип, указанный в T. Поэтому, если вы хотите использовать схему при описании, вам нужно будет создать один контракт на обслуживание и сопоставить все с этим контрактом на обслуживание. Из описания я не уверен, что {RootResouceId} отображается на определенный элемент данного типа, т.е. все типы одинаковы, и в этом случае имеет смысл поместить их в один контракт или в другие типы, и в этом случае я бы сделал эта часть службы сопоставления, т.е.
routes.MapServiceRoute<ChildResource1>("RootResource/Child1");
routes.MapServiceRoute<ChildResource2>("RootResource/Child2");