Веб-API, кажется, подходит только для стандартных случаев использования. Но я хочу сделать более сложную маршрутизацию, но не могу найти документацию по сложной маршрутизации. Если у меня больше контроллеров, маршруты становятся все более и более сложными.
Могу ли я определить несколько необязательных параметров с зависимостями? Примерно так:
/api/document/{par1}/{par2}
par1 и par2 должны быть необязательными, но par2 должен совпадать, только если присутствует par1.
А рекурсивные параметры возможны?
/api/documents/characteristics/{round/green/red-dots}
/api/documents/characteristics/{square/yellow}
/api/documents/characteristics/{square/yellow/flat}
/api/documents/characteristics/{square/yellow/flat/...}
Есть ли подробная документация по маршрутизации веб-API? Учебник Microsoft слишком прост... Мне нужно больше информации о маршрутизации.
У меня есть два контроллера и некоторые проблемы, потому что две маршрутизации очень похожи, поэтому выбран неправильный маршрут. Я могу использовать [Action]-Attribute в качестве обходного пути, но это кажется неправильным... Я также должен учитывать порядок маршрутов. Это логично, но нигде не упоминается. Является ли веб-API только для простых остальных API?
Редактировать: Я пробовал это:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{mandant}/documents/{id}",
defaults: new { controller = "documents", id = RouteParameter.Optional }
);
//routes.MapHttpRoute(
// name: "DefaultApiWithAction",
// routeTemplate: "api/{mandant}/documents/{id}/{action}",
// defaults: new { controller = "documents" }
// );
У меня есть два метода:
[AcceptVerbs("get")]
public HttpResponseMessage Get(int id)
[ActionName("file")]
[AcceptVerbs("get")]
public HttpResponseMessage filedownload(int id)
Теперь у меня проблема, действие файла запускается, даже если я закомментирую второй маршрут, а обычный метод получения конкретного документа не запускается, потому что несколько действий.. Я попробовал атрибут [NoAction], но он не работает...Но почему сработает файловый метод, если в шаблоне маршрута нет действия? (Или, если второй маршрут активен, почему обычный метод get-document не будет запущен, если в URL-адресе нет действия....) Мой текущий обходной путь — установить действие по умолчанию для всех других методов, но это не очень хорошее решение.