Все запросы к ASP.NET Web API возвращают ошибку 404

У меня есть веб-сайт ASP.NET MVC 4, который включает в себя веб-API. Сайт разработан и протестирован с использованием Visual Studio 2012 и .NET 4.5 для Windows 8 с IIS Express в качестве веб-сервера.В этой среде разработки все работает.

Теперь он развернут на сервере Windows 2008 R2 (SP1) с IIS 7.5. .NET 4.0 и 4.5 установлены. Пул приложений работает с .NET 4.0 в режиме интегрированного конвейера.

В этой производственной среде веб-сайт MVC работает, а веб-API - нет. Для каждого запроса, неважно, GET или POST, я получаю ошибку 404. Если я просто ввожу URL-адрес Web API в браузере (IE 9 открывается локально на сервере), чтобы выполнить запрос GET, я получаю страницу 404. Если я выполняю запрос POST из клиентского приложения Web API, я получаю также 404 и сообщение:

Не найден ресурс HTTP, соответствующий URI запроса

Я создал тестовый веб-сайт с MVC 4 и Web API, а также развернул его на том же сервере, и Web API работает. Сборки Web API и MVC имеют одинаковый номер версии в обоих проектах.

Кроме того, я добавилWeb API Route Debugger к заявке. Если я использую правильный маршрут, какhttp://myserver/api/order/12 Я получаю следующий результат:

Для меня это означает, что правильный шаблон маршрутаApi/{Controller}/{Id} был найден и правильно проанализирован в контроллереOrder а такжеId=12, Контроллер (производный отApiController) существует в веб-сборке, где также находятся все контроллеры MVC.

Однако я не знаю, что такое статус000 может означать и почему не отображается раздел «Выбор маршрута» (что обычно имеет место, даже если сборка не содержит ни одногоApiControllerсм. скриншоты на связанной странице выше). Как-то это выглядит как нетApiController найден или даже не найден или поиск завершается неудачно.

Файлы журнала IIS не показывают ничего полезного. Изменение различных настроек пула приложений и использование одного и того же пула приложений для теста и реального приложения не помогло.

В настоящее время я нахожусь в процессе удаления «функций», настроек конфигурации, сторонних сборок и т. Д. Из приложения, чтобы в итоге довести его до небольшого размера тестового приложения, и надеюсь, что в какой-то момент оно начнет работать.

Кто-нибудь знает, в чем проблема? Также приветствуется любая идея отладки или регистрации, чтобы найти причину.

редактировать

Благодаря совету Даррела Миллера в комментариях ниже я интегрировалТрассировка для ASP.NET Web Api.

Для (GET) запроса URLhttp://myserver/api/order/12 Я получаю следующее:

В среде разработки, успешно (в краткой форме):

Сообщение:http://localhost:50020/api/order/12; Категория: System.Web.Http.Request

Выбор и реализация контроллера ...

Оператор: DefaultHttpControllerSelector; Операция: Выбрать контроллер; Сообщение: Route = "controller: order, id: 12"; Категория: System.Web.Http.Controllers

Оператор: DefaultHttpControllerSelector; Операция: Выбрать контроллер; Сообщение: заказ; Категория: System.Web.Http.Controllers

Оператор: HttpControllerDescriptor; Операция: CreateController; Сообщение:; Категория: System.Web.Http.Controllers

Оператор: DefaultHttpControllerActivator; Операция: Создать; Сообщение:; Категория: System.Web.Http.Controllers

Оператор: DefaultHttpControllerActivator; Операция: Создать; Сообщение: MyApplication.ApiControllers.OrderController; Категория: System.Web.Http.Controllers

Выбор действия, привязка параметра и вызов действия ...

Согласование содержимого и форматирование для результата ...

Оператор: DefaultContentNegotiator; Операция: переговоры; Сообщение: Typ = "String" ...Больше

Утилизация контроллера ...

Оператор: OrderController; Операция: Утилизировать; M, essage:; Категория: System.Web.Http.Controllers

В производственной среде не удачно (в краткой форме):

Сообщение:http://myserver/api/order/12; Категория: System.Web.Http.Request

Оператор: DefaultHttpControllerSelector; Операция: Выбрать контроллер; Сообщение: Route = "controller: order, id: 12"; Категория: System.Web.Http.Controllers

Вся часть активации контроллера, выбора действия, привязки параметра, вызова действия отсутствует, и это сразу следует согласованию содержимого и форматированию для сообщения об ошибке:

Оператор: DefaultContentNegotiator; Операция: переговоры; Сообщение: Type = "HttpError" ...Больше

Ответы на вопрос(3)

Ваш ответ на вопрос