Веб-API ASP.NET 4 MVC: документация по сложной маршрутизации.

Веб-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-адресе нет действия....) Мой текущий обходной путь — установить действие по умолчанию для всех других методов, но это не очень хорошее решение.

5
задан Benjamin 8 November 2013 в 14:46
поделиться