В вашем вопросе есть что распаковать. Сначала к вашему общему запросу:
С моей точки зрения, контроллеры ASP.NET Core MVC очень похожи на проекты Web API, и я не вижу большой разницы с точки зрения их использования. По сути, я не совсем понимаю, есть ли два проекта (проект Core MVC и отдельный проект Web API) или только один.
Это потому, что функционально нет никакой разницы. В ASP.NET Core контроллеры являются контроллерами. Обозначения MVC / Web Api просто о стиле . В первом случае вы будете возвращать представления, а во втором - что-то вроде JSON.
По правде говоря, в более поздних версиях ASP.NET Core стили немного расходятся. Контроллеры API теперь обычно наследуются от ControllerBase
, а не Controller
, и к ним применяется атрибут [ApiController]
. Однако даже это не реальная разница. Атрибут просто добавляет немного сахара, который немного упрощает создание API: автоматический возврат 400, когда ModelState
недопустим, переключение привязки по умолчанию с FromForm
на FromBody
и т. Д. Это все, что вы могли бы с MVC точно так же. Использование ControllerBase
просто исключает материал, включенный в Controller
, который не нужен для API. Нет способа View
для возврата, потому что вы не будете возвращать представления из API, например. Все остальное работает так же.
Короче говоря, о том, как вы реализуете контроллер, а не о каком-либо конкретном выборе использования MVC или Web Api.
Теперь, что касается ваших конкретных вопросов:
- Должен ли я использовать два проекта или только один? Какие преимущества и недостатки? Если я использую два, на основании каких критериев я решу, куда добавить новый код? Могу ли я переместить практически любой (что является исключением) код из контроллеров в проекте Core MVC в проект Web API? Это хороший подход или плохой?
Опять же, много здесь, чтобы распаковать. Просто нет правильного ответа, и, честно говоря, вам не нужно решать прямо сейчас. Вы можете начать с одного проекта, смешивая и сопоставляя контроллеры MVC и Web Api. Затем, если вы обнаружите конкретную потребность, вы всегда можете создать новый проект и перенести туда свои контроллеры Web Api. Это зависит только от ваших требований и потребностей ваших приложений, с которыми, к сожалению, никто не может говорить, кроме вас. Мой лучший совет всегда должен начинаться с малого. Выйди из сорняков и просто построй что-нибудь. Вы не вырезаете из камня; что-нибудь может быть изменено позже.
- Как мне обработать логин на стороне клиента? Я знаю, что могу получить аутентификацию на основе токенов с OWIN для своего проекта Web API, но как мне объединить аутентификацию из проекта ASP.NET Core MVC с проектом Web API?
Как только вы начнете говорить о проверке подлинности нескольких приложений, вам действительно нужно начать искать решение для централизованной идентификации. Из коробки есть готовые решения с низкой конфигурацией, такие как Azure AD или Auth0, или вы можете использовать свои собственные с Identity Server. Это в основном сводится к тому, что вы готовы заплатить и насколько вы хотите быть вовлечены.
- Давайте предположим, что я решил использовать один проект для обоих. Сколько накладных расходов, если приложение Xamarin будет постоянно вызывать проект MVC вместо проекта Web API?
Я не думаю, что вы смотрите на это правильно. Запросы - это запросы, а вопрос лишь масштабный. Разница между одним приложением (одним проектом) и множеством заключается в том, идут ли все запросы в одно место или во многие. Однако вы всегда можете масштабировать как по вертикали (ресурсы), так и по горизонтали (больше экземпляров) даже одно приложение. Таким образом, производительность здесь не является проблемой. В любой форме вы масштабируете, просто по-разному.