Подтвердить что ты не робот

Веб-интерфейс API - рендеринг Razor по умолчанию?

Как заставить Web API отображать представление Razor с помощью возвращаемой модели? И только XML/JSON, когда установлены заголовки accept (или. Extension)? Возможно ли это?

Кажется сумасшедшим требовать один набор контроллеров для рендеринга HTML, а другой для JSON/XML, если они работают на одних и тех же моделях.

Обновление Даррел Миллер уже написал ViewEngineFormatter для Razor, который мог бы сделать трюк, хотя и не пробовал это еще.

4b9b3361

Ответ 1

Я задал аналогичный вопрос об этом в прошлом в StackOverflow, потому что хотел сделать то же самое. Тем не менее, я в конечном итоге оказался с областью "Api" и набором контроллеров, а также стандартным набором контроллеров MVC для веб-сайта.

Оглядываясь назад, это было не так уж плохо. В любом случае, я обнаружил, что я стараюсь делать разные вещи в каждом наборе контроллеров. Мои взгляды - это не только CRUD, но, как правило, содержат дополнительные контекстуальные данные, поэтому возвращение моделей просмотра, характерных для этой страницы, является приятным.

Я думаю, что если бы я придерживался своей цели по объединению двух, я, возможно, закончил бы слишком сложные контроллеры или пользовательский опыт, который был бы не таким оптимальным, как мог бы быть. Поэтому, хотя это не прямой ответ на ваш вопрос, по моему опыту, неспособность сделать это может быть не такой уж плохой.

Вместо этого я закончил с богатым набором разработчиков и команд, которым доверяют большинство моих контроллеров. Таким образом, я могу повторно использовать большую часть логики контроллера, имея возможность делать определенные вещи для API по сравнению с сетью:

http://www.paulstovell.com/clean-aspnet-mvc-controllers

Ответ 2

Да, именно так он создан для: веб-API для данных и MVC для визуализированных представлений. Я знаю, что некоторые люди попытаются добавить поддержку движка просмотра в веб-API, но он не предназначен для он.

Мой личный взгляд на это заключается в том, что этот параллельный мир между MVC и веб-API (который является источником большинства критических замечаний, в то время как сообщество обычно оценивает продукт) в основном является следствием того факта, что Web API был добавлен в MVC без ссылки (или знания об этом).

Как сказал Джон Галлоуэй в недавнем подкасте, у команды есть знания HTTP, которые у них есть сейчас (а также неизвестность популярности REST API сейчас, которых у них тогда не было), они разработали бы только один трубопровод, обслуживающий данных и визуализации.

Я могу только предположить, что версия будущего MVC/Web API будет представлена ​​в виде единого конвейера. Фактически, этот параллельный мир, возможно, был тщательным планом, чтобы объединить их в ближайшем будущем.

Ответ 3

Кажется сумасшедшим требовать один набор контроллеров для рендеринга HTML а другой для JSON/XML, если они работают на одних и тех же моделях.

AFAIK, как это. Стандартные контроллеры должны использоваться для рендеринга HTML и ApiControllers для JSON/XML.

Ответ 4

Кажется сумасшедшим требовать один набор контроллеров для рендеринга HTML а другой для JSON/XML, если они работают на одних и тех же моделях.

Web API - это именно то, что он называется - технология для создания API.

Если вы создаете приложение ASP.NET MVC и хотите вернуть JSON для своей собственной цели, вам не нужны согласования контента и т.д., поэтому вам не нужен веб-API (просто используйте простой старый JsonResult).

Если вы хотите создать API многократного использования, чем веб-API, вам нужно, но ваше клиентское приложение должно потреблять его так же, как и все остальные.

Веб-API не должен быть "молотком" для "гвоздей" всех не-HTML-запросов - используйте его, когда вам это нужно.

Ответ 5

Я ищу нечто подобное этому, но не полностью. Прочесывая паутину, я нашел пару сообщений от Фредрика Нормена. Он пишет об этом точном пространстве проблем и фактически идентифицирует стороннее решение во втором опубликованном сообщении. В основном, решение включает в себя создание пользовательского MediaTypeFormatter, который знает, как обрабатывать представления, используя движок Razor, предоставленный Microsoft (с использованием сторонней библиотеки).

Надеюсь, что Microsoft скоро что-то реализует в Web API, поскольку Hypermedia, похоже, набирает силу.

Надеюсь, это поможет!