Веб-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.

Другие вопросы по тегам