Регистрация маршрутов wcf web api

У меня проблема с 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 ответ

Решение

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

routes.MapServiceRoute<ChildResource1>("RootResource/Child1");
routes.MapServiceRoute<ChildResource2>("RootResource/Child2");
Другие вопросы по тегам