Как смешать страницы Web API и ASP.Net MVC в одном проекте?
Например, у меня есть модель User. Я хотел бы в рамках одного проекта иметь ApiController, который отвечал бы на все HTTP-версии для управления сущностями User, и в то же время иметь Controller, который возвращал бы соответствующие сильно типизированные представления в зависимости от запрашиваемого действия.
Я не могу назвать оба контроллера UserController. Какой лучший способ обойти это? Должен ли я назвать один UserApiController, а другой UserController? Есть ли другие предложения?
Вы можете поместить их в отдельные пространства имен, например, MyApp.Controllers.UsersController и MyApp.Controllers.WebAPI.UsersController.
Это позволит вам открывать аналогичные маршруты URI в MVC и WebAPI, например:
/users/1 << MVC view
/api/users/1 << Web API
Я не менял пространства имен, единственное, что мне пришлось сделать, это зарегистрировать сначала WebApi, а затем маршрут MVC.
//First register WebApi router
GlobalConfiguration.Configure(WebApiConfig.Register);
//and register Default MVC Route after
RouteConfig.RegisterRoutes(RouteTable.Routes);
и все работает отлично!
Реализация WebApi должна быть добавлена как отдельная Область в приложении MVC. Это естественное решение. Это дает вам отдельное пространство имен, которое рекомендовал Майк Вассон, а также естественный способ настройки маршрутизации /api. Вы получаете отдельную папку модели
Кроме того, она очень четко отделена от остальной части проекта. Если в будущем возникнут такие требования, что вам понадобится выделить реализацию api в отдельный проект, то выделение реализации api в отдельную область значительно упростит эту задачу.