Я добавил Web API 2 в существующее MVC 5 веб-приложение. Я использую методы этого веб-API для возврата JSON данных в MVC представления.
Это пример вызова ajax внутри представления:
$.getJSON('@Url.RouteUrl("DefaultApi"
, new { httproute = true, controller = "Data", action = "GetMyData" })'
, function (data) {
... do sth with returned json data here ...
});
это код, сгенерированный на клиенте:
$.getJSON("/api/Data/GetMyData", function (data) { ...
и вот так выглядит файл WebApiConfig.cs:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Все отлично работает, когда я отлаживаю в Visual Studio. Но когда я развертываю приложение в IIS как приложение в разделе «Веб-сайт по умолчанию», все ссылки на методы действий Web API нарушаются.
Другими словами $.getJSON("/api/Data/GetMyData", function (data) { ...
отлично работает, когда я запускаю сеанс отладки из Visual Studio, но возвращает ошибку 404 при развертывании приложения в IIS.
Когда я набираю
http://localhost/myAppVirtualPath/api/data/GetMyData
непосредственно в адресной строке браузера, я получаю результаты, как и ожидалось.
Кажется, что виртуальный путь приложения должен быть добавлен перед '/ api' в URI. Но @Url.RouteUrl("DefaultApi"
не может этого сделать. Есть ли что-то очевидное, чего мне здесь не хватает? Я думаю, что есть, но что это может быть?