Задача
Мой текущий проект требует, чтобы я делал разные вещи на основе разных заголовков HTTP-запросов для почти каждого действия.
В настоящее время у меня есть один массивный контроллер (все для одного и того же типа ресурса), и каждый метод действия имеет атрибут ActionName (так что я могу иметь несколько версий одного и того же действия, которое принимает одинаковые параметры, но выполняет разные действия) и собственный FilterAttribute (реализованный почти так же, как AcceptVerbsAttribute в Preview 5), который проверяет, имеют ли определенные заголовки определенные значения.
Я бы очень хотел поместить код в отдельные контроллеры и выбрать между ними RouteTable на основе заголовков, но не могу придумать, как сделать это самым чистым способом.
Пример
Например, скажем, у меня есть список файлов. Служба должна обработать запрос одним из двух способов:
Клиент хочет zip-файл и передает в качестве заголовка "accept: application / zip", я беру список файлов, упаковываю их в zip-файл и отправляю обратно клиенту.
Клиенту нужна html-страница, поэтому он передает «accept: text / html», сайт отправляет обратно html-страницу в формате таблицы со списком файлов.