#azure #api #azure-web-app-service
#azure #API #azure-web-app-service
Вопрос:
Мы настроили проект службы приложений на портале Azure, а затем выполнили развертывание проекта с использованием Visual Studio DevOps. Когда я захожу в http://MyAzureSite.azurewebsites.net (Выдуманный URL здесь), я могу подтвердить, что служба запущена.
Но когда я добавляю «api / controllerName / GetStatus», я получаю ошибку 404.
Вызов с моего локального компьютера работает отлично.
http://localhost:52686/api/status/getStatus
Но не:
http://MyAzureSite.azurewebsites.net/api/status/getstatus
Подпись для GetStatus выглядит хорошо:
[HttpGet]
public List<Status> GetStatus()
Комментарии:
1. Что делает метод? Возвращает ли он каким-либо образом значение 404, если, например, запись базы данных не существует? Работает ли это, если вы нажмете на
*.azurewebsites.net
конечную точку (если применимо)?2. Спасибо, Брендан, извините, что не разъяснил, да .azurewebsites. сеть попадает и отрисовывается нормально. У меня есть несколько вызовов в нем, которые даже не требуют обращения к базе данных, а просто возвращают текст об успешном завершении. Конечная точка достигнута, но вызовы api просто выдают 404 с ошибкой. Ресурс, который вы ищете, был удален, его имя было изменено или он временно недоступен…. Есть ли какое-либо встроенное ведение журнала в azure, которое можно использовать для просмотра подробной информации об ошибке. Странно то, что он отлично работает на моем локальном компьютере, но не после публикации кода в azure.
Ответ №1:
У нас была точно такая же проблема с самой последней версией .NET Core 3.1 LTS. Мы обнаружили множество причин, которые могут вызвать эту проблему. Вот наши выводы:
- Конечные точки API должны расширять ControllerBase вместо контроллера:
ControllerBase создает контроллер БЕЗ поддержки view. Контроллер предназначен для поддержки просмотра. У нас была конечная точка API, которая не могла быть достигнута при развертывании в Azure, если это был расширяемый контроллер, и у него не было представления. Никаких ошибок или чего-либо еще. Просто не удалось ее достичь.
- Убедитесь, что служба приложений настроена для правильного стека. Наш веб-API использует .NET Core 3.1. Если вы создаете его из Visual Studio, он может быть настроен для неправильного стека. Наша Visual Studio 2019 настроила его для версии 3.0 EOL по умолчанию. Когда мы изменили ее на 3.1, все снова заработало.
- Создание с портала Azure не работает с конфигурацией по умолчанию.
Если вы создаете службу приложений / веб-приложение через портал Azure, вы сначала не сможете достичь ни одной из конечных точек. Мы не уверены, почему это так, но мы выяснили, как заставить это снова работать. Перейдите к конфигурации службы приложений и выполните следующие действия:
- Выключите режим «Всегда включен».
- Сохраните и дождитесь применения настроек
- Включите «Всегда включено»
- Сохраните и дождитесь применения настроек
Теперь вы должны снова получить доступ к своим конечным точкам API
Вот несколько проблем, с которыми мы столкнулись, и способы их решения. Надеюсь, они помогут вам, ребята, и избавят вас от необходимости повторять «Мы это исправили!» только для того, чтобы снова перестать работать по другой неизвестной причине. Я буду обновлять этот ответ по мере того, как я найду больше вещей, которые нарушают работу API и служб приложений, и по мере того, как я нахожу решения для них.
Ответ №2:
Нам пришлось снова правильно перестроить проект, поскольку способ создания проекта был некорректным.