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

Проекты MVC и Web Api в рамках одного решения

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

Но я не понимаю, как это все работает как уровень MVC - это проект запуска: он устанавливает мой DI, automapper и т.д., и это проект, который я развертываю на сервере.

Итак, как все это должно быть настроено? Могу ли я настроить проект MVC для маршрутизации всех запросов /api в новый проект Web Api? Или нужно ли развертывать проект Web Api отдельно?

Я не хочу делать что-то необычное, поэтому, если есть гораздо более распространенный способ настройки, просьба указать мне в правильном направлении.

Спасибо.

4b9b3361

Ответ 1

WebApi - это альтернативное сервис-ориентированное приложение от Microsoft, как и WCF. Но WCF использует протокол SOAP, и WebAPI использует протокол HTTP для связи.

Итак, если вы используете WCF для предоставления услуг для своего приложения MVC, вы будете размещать эту службу wcf отдельно и потреблять ее службу с помощью приложения MVC, ТОЧНО, так же, как вы должны размещать ваш проект WebAPI отдельно и предоставлять услуги вашему веб-приложению ( MVC).

по каким-либо причинам, если вы хотите, чтобы они (MVC и WebAPI) использовались в одном проекте, следуйте этим правилам из этой статьи.

http://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspx

Ответ 2

Я только что сделал то же самое вчера. У меня есть те же обычные контроллеры MVC 4 и ApiControllers.

Вам нужно добавить маршрутизацию в Global Asax для WebApi:

WebApiConfig.Register(GlobalConfiguration.Configuration);

Взгляните на WebApiConfig:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

Не забудьте также добавить пакеты Nuget для WebApi (если у вас их уже нет). В моем случае у меня их не было, потому что мой проект был изначально MVC 3 и позже был обновлен.

Ответ 3

Вам просто нужно добавить контроллеры маршрутизации и API на существующий сайт MVC, где все они будут доступны в site/api/