Интерфейс 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 терпит неудачу? Спасибо!
Ответы
Ответ 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.