Веб-API ASP.NET не работает в Azure
Почему веб-API перестает работать на веб-сайтах Azure, если он работает на локальном хосте.
Ошибка: не удалось загрузить ресурс: сервер ответил со статусом 404 (не найден) или искомый ресурс был удален, изменилось его имя или временно недоступен. при вставке URL в API в браузере.
ПРИМЕЧАНИЕ. Я никогда не сталкивался с этой ошибкой, и у меня уже есть несколько сайтов на Azure, использующих маршрутизацию атрибутов Web Api.
WebConfig
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
RouteConfig
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Cities",
url: "Cities/{id}/{name}/{action}",
defaults: new { controller = "Cities", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Global.asax
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Goggling показал, что это общая проблема:
Страница HTTP 404 не найдена в Web Api, размещенном в IIS 7.5
WebAPI DELETE запрос возврата 404 ошибка в Azure
Проблемы с маршрутизацией WebApi и ASP.NET 4
https://stackru.com/questions/15805471/using-windows-azure-websites-with-extensionlessurlhandler
Настройка методов IIS для ASP.NET Web API на веб-сайтах Windows Azure
Как URL-адреса без расширений обрабатываются ASP.NET v4
Получение 404 из WebAPI на веб-сайтах Windows Azure
ASP.NET MVC 4 и веб-API в Azure - ресурс HTTP не найден
MVC 4.5 Web API Routing не работает?
ОБНОВИТЬ
После попытки каждого метода, предложенного в ссылках выше, я удалил все *.dll из решения, создал новый проект MVC+Web API и добавил *.dll к решению. Сборка и все работало как положено в первую очередь.
3 ответа
Старый пост, но вы пробовали:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
Попробуйте следующие 2 метода.
Метод 1. попробуйте Установить
web.config
как показано ниже
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="aspNetCore"/>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="dotnet" arguments=".\Somerandomname.WebApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
Для получения дополнительной информации вы можете обратиться к веб-API ASP.NET Core, который работает локально, но не в службе приложений Azure.
Метод 2. Убедитесь, что ваш URL-адрес в браузере правильный. В некоторых случаях вам нужно добавить
azureAPIurl/api/ имя контроллера
Я решил проблему путем перехода с.net Framework 4.6.1 на 4.6.2. Теперь это работает для меня
Убедитесь, что у вас нет файлов, случайно исключенных из вашего проекта - особенно проверьте Global.asax и Global.asax.cs. Исключенные файлы не публикуются и, следовательно, будут работать локально, но не в Azure.
Так же, как @Matija Grcic, после успешного развертывания приложения Web API в Azure я неоднократно сталкивался с вопросом "Ресурс, который вы ищете, был удален…" в новых развертываниях. Я нашел виновника в смешанных проблемах версий из следующих трех сборок:
System.Net.Http.dll
System.Net.Http.Formating.dll
System.Net.Http.WebRequest.dll
Я отметил, что ссылка моего проекта на эти сборки была настроена на использование их из глобального кэша, а затем не была скопирована в Azure при развертывании. Но также я обнаружил, что в журнале ошибок моего приложения он жаловался на то, что не нашел их. Последняя подсказка: они существовали в каталоге моей машины для разработки.
Я удалил их из каталога разработки и файла Web.config, где есть явное упоминание этих сборок, из раздела runtime>assemblyBinding> independentAssembly. Публикуется снова и ошибка преобладает.
Затем вручную скопируйте указанные три сборки в папку bin в Azure, используя FTP и вуаля! Мой веб-API работает!
Я предполагаю, что в среде Azure есть новые версии для новых веб-приложений (на момент написания этой статьи -.Net 4.7), и мой старый проект Visual Studio, возможно, собирал MVC и веб-API, рассчитывая использовать старые версии. Таким образом, попытка создать новый проект с использованием и ссылками на более новую.Net среду должна помочь, как это сделал @Matija Grcic.