2017-01-30 4 views
1

У меня есть веб-сайт, сделанный на C# (http://my.site/), и теперь у меня есть проект веб-API, который я хочу объединить в этот домен и прослушивать на http://my.site/api. Это два отдельных проекта в VS2013.Host WebApi и сайт C# в том же домене

Я попытался загрузку веб-API для /api/ подкаталоге на сервере и на карте маршрут MVC к нему (WebAPI маршрут WebApiConfig.cs еще routeTemplate: "api/{controller}/{id}"), ожидая (Home) контроллер MVC по умолчанию для ответа в /api/. Маршрут MVC (в маршрутизации MVC WebAPI в):

routes.MapRoute(
     name: "Default", 
     url: "{controller}", //Also api/{controller} 
     defaults: new { controller = "Home", action = "Get", id = UrlParameter.Optional } 
    ); 

Но я получаю «Ошибка сервера 404» при доступе к http://my.site/api//http://my.site/api/home и т.д. Я не понимаю природу этой ошибки (скорее всего настройки на сайте C# в корневой папке), но можно подумать, что IIS будет обслуживать приложение по умолчанию в папке /api/.

Так я хочу знать, если при добавлении к WebApiConfig.Register(GlobalConfiguration.Configuration);Global.asax (Application_Start()) и добавление WebApiConfig.cs в App_Start папка C# проекта (и с использованием соответствующих пространств имен) будет решать вопрос , Это кажется слишком простым, чтобы быть правдой, поэтому я сомневаюсь, что это сработает, поэтому мне нужно, чтобы кто-то указал мне в правильном направлении, или я совершу грех вернуться к asmx.

Если нет, то как я могу иметь сайт C# и WebAPI в том же домене?

+0

Ожидаете ли вы, что WebSiteA сможет слушать и отвечать на запрос, сделанный для WebSiteB? –

+0

У меня есть веб-сайт (C#), и я хочу добавить созданный для него WebAPI. – Tiago

+3

Почему бы вам не поместить вашу логику в общую dll и добавить веб-api-библиотеки в существующий проект веб-форм и создать экземпляры веб-сервера ASP, если необходимо, чтобы обратиться в библиотеку. Таким образом, вы все равно можете развернуть его как самостоятельное решение, если вам когда-либо понадобится, но вы можете разместить свои контроллеры непосредственно в одном проекте. В настоящее время мы делаем это, поскольку нам нужны контроллеры web-api в одном из наших унаследованных проектов, никаких проблем вообще. – Igor

ответ

4

Вы хотите запустить две отдельные DLL (каждая со своими правилами маршрутизации) в одной папке с корзиной на вашем сервере. Это может привести к некоторым конфликтам при маршрутизации на вашем сайте. Правильный способ сделать это - разместить ваш проект api на отдельном сервере и использовать поддомен, такой как http://api.my.site/. Таким образом, вы убедитесь, что ваш сайт C# (http://my.site/) будет иметь доступ к api (http://api.my.site/). И ваши DLL, включая правила маршрутизации, останутся раздельными.

+0

Это кажется разумным предложением, но исключает возможность наличия 'my.site/api /' url, который, кажется, является стандартом в наши дни. – Tiago

+1

Как правило, вы используете что-то вроде 'my.site/api', если у вас есть все в одном решении. Что-то вроде 'api.my.site' обычно используется, когда у вас есть два отдельных решения. И 'api.my.site' не редкость. –

+0

Я понимаю, что это оптимизированное для SEO решение, и я буду использовать ваше предложение, если невозможно/беспорядочно запускать два проекта в одной и той же папке сервера (один в корневой другой в '/ api') – Tiago

Смежные вопросы