Интерфейс Web API работает локально, но получает 404 после развертывания на Azure Website - программирование

Интерфейс Web API работает локально, но получает 404 после развертывания на Azure Website

Я работаю над веб-сайтом ASP.NET MVC 4. Вместе с контроллерами MVC у меня есть один контроллер API, который содержит интерфейс API AJAX GET. Он отлично работает при отладке локально с визуальной студией.

Однако после того, как я развернул его как Azure Website, MVC-контроллеры работают, но контроллер API больше не работает. Когда код jQuery пытается достичь этого, он возвращает ответ вроде:

Не найден ресурс HTTP, который соответствует URI запроса http://example.com '.

Похоже, что маршрут работает (в противном случае возвращается еще 404 тела ответа.).

Кроме того, у меня есть еще одна чистая служба веб-API MVC 4, развернутая как служба облачного облака. Он работает отлично. Таким образом, мне интересно, почему API-интерфейс внутри веб-сайта MVC терпит неудачу? Спасибо!

4b9b3361

Ответ 1

Проверяйте эти вещи, которые они обычно помогают:

  • Убедитесь, что тип вашего контроллера является общедоступным и происходит от ApiController
  • Убедитесь, что контроллер имеет имя "xxxxController", где xxxx является именем контроллера

В этом случае URL api/xxxx должен работать.

Ответ 2

Это обычная проблема. Когда приложение MVC развертывается в IIS, URL-адрес HTTP, который вызывает службу REST, отображаемую вашим веб-интерфейсом, изменится. Если ваш контроллер api называется MyApiController, поэтому в производственной среде вы должны добавить имя приложения перед вызывающим URL. Это означает, что /api/MyApi станет/MyApp/api/MyApi. MyApp является префиксом вашего веб-сайта (yourwebsite/MyApp).

Ответ 3

Я решил проблему. Я использую Telerik DataAccess как свой ORM, а проект должен иметь Copy Local до True.

Аналогично, добавьте все ссылки в качестве Копировать Local = True, если они, похоже, являются сторонними DLL или из nuget.

Вы можете легко найти ошибку, добавив <customErrors mode="Off" /> внутри <system.web> в файл Web.config.