Страница HTTP 404 не найдена в веб-Api, размещенном в IIS 7.5
У меня есть приложение Web Api. Это прекрасно работает, когда я тестировал его с помощью VS 2010 отладку разработка. Но теперь я развернул его в IIS 7.5, и я получаю ошибку HTTP 404 при попытке доступа к приложению.
вот моя паутина.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.SQLEXPRESS;Initial Catalog=aspnet-FlowGearProxy-20123141219;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="true" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
26 ответов
Я тоже боролся с этим. К счастью, Стив Микелотти задокументировал решение, которое сработало для меня здесь.
в конце дня я включил все глаголы (verb="*") в обработчик ExtensionlessUrlHandler-Integrated-4.0 в моей веб-конфигурации.
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
другие указали, что включение WebDAV вызывает проблемы. К счастью, я не столкнулся и с этим вопросом.
была такая же проблема. Этот параметр конфигурации решил проблему.
<system.webServer>
.....
<modules runAllManagedModulesForAllRequests="true" />
.....
</system.webServer>
как объяснено в http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html выше решение следует избегать. Используйте это вместо этого. Такое же решение обеспечивает и Lopsided. Держите его здесь, чтобы позволить пользователям избежать реализации первого рабочего решения.
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
<!-- any other modules you want to run in MVC e.g. FormsAuthentication, Roles etc. -->
</modules>
Если IIS установлен или включен после ASP.NET, вам нужно будет вручную зарегистрироваться ASP.NET с IIS для работы вашего приложения .NET.
для Windows 7 и более ранних версий:
- Запустите командную строку (cmd.exe), как администратор.
- перейдите в соответствующее расположение .NET Framework. (например, C:\Windows\Microsoft.NET\Framework64\v4.0.30319)
- выполните команду aspnet_regiis.exe-i
для Windows 8 и более поздние версии:
- в меню Пуск введите "включить или выключить Компоненты windows" и выберите первый результат.
- разверните Internet Information Services: World Wide Web Services: возможности разработки приложений и выберите ASP.NET 4.5 (или ASP.NET 3.5 если требуется поддержка проектов в .NET Framework 2.0-3.5).
- нажмите OK.
вы используете приложение Web API в виртуальном каталоге или приложении?
например: у меня была та же проблема, когда я переместил свой проект в локальный IIS под веб-сайтом по умолчанию > SampleWebAPI. Я считаю, что это связано с изменением URL
маршрутизации следующим образом:
Оригинал: localhost:3092/api/values
Переехал:localhost/SampleWebAPI/api/values
если вы переместите проект Web API на собственный веб-сайт, работающий на другом порту, кажется, работа.
дополнительное примечание: Я еще больше усложнил проблему, добавив api
как псевдоним приложения на моем веб-сайте, который вызвал эффективный URL
для:
localhost:81/api/api/values
- заметил это после перемещения веб-сайта на свой собственный веб-сайт
поэтому, поскольку я хотел сохранить разделение между моим сайтом и сайтом проекта web api mvc, я изменил правила маршрутизации в global.asax
для веб-API "DefaultAPI" из api/{controller}/{id}
to {controller}/{id}
и ASP.NET MVC one Default
С {controller}/{id}
to info/{controller}/{id}
.
Это единственный ответ, который работал для меня...
У меня была аналогичная проблема... Казалось, что бы я ни делал, ничто не перенаправлялось, и мой глобальный файл просто игнорировался. Я всерьез подумывал о том, чтобы просто закончить все это, прежде чем найти этот ответ. Надеюсь, эта ссылка поможет кому-то другому.
добавить следующее в файл web.конфиг файл работал на меня:
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
</system.webServer>
несколько вещей, чтобы проверить:
- убедитесь, что у вас установлен .NET Framework 4.
- убедитесь, что версия 4 .NET Framework выбрана для вашего веб-сайта и виртуального каталога (если применимо).
- убедитесь, что у вас установлен MVC или есть соответствующие библиотеки DLL в каталоге bin.
- возможно, потребуется разрешить ASP.NET 4.0 расширения веб-службы
- поместите приложение в собственный пул приложений.
- убедитесь, что в каталоге есть как минимум разрешения на выполнение "только скриптов".
У меня была похожая проблема. У меня правильные настройки в web.файл конфигурации, но запускал пул приложений в классический режим, а не встроенный режим
эта проблема также может произойти из-за следующего
1.В Сети.Config
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<system.webServer>
2.Убедитесь, что в папке bin на сервере, где развернут веб-API, доступно следующее
Я тоже столкнулся с этой проблемой. Я решил проблему, перейдя в пулы приложений > имя пула приложений и изменил .NET Framework с версии v. 2.0.50727-v4.0.30319.
существует официальное исправление от microsoft: http://support.microsoft.com/kb/980368
Я настоятельно не рекомендую использовать . Это приводит все запросы (даже .формат JPG. ,стиль CSS. ,pdf и т. д.) будут обрабатываться всеми зарегистрированными http-модулями. Есть два отрицательных момента: а) дополнительная нагрузка на аппаратные ресурсы; б) потенциальные ошибки, так как http-модули будут обрабатывать новый тип контента.
Я начал получать 404 ответа от Web API после выполнения учебника Windows Azure, который сказал мне добавить файл "WebRole.cs " к моему проекту.
после удаления " WebRole.cs " из моего проекта мои вызовы веб-API снова начали работать.
пожалуйста, убедитесь, что пул приложений в встроенный режим
И добавьте в web следующее.конфигурационный файл:
<system.webServer>
.....
<modules runAllManagedModulesForAllRequests="true" />
.....
</system.webServer>
в моем случае проблема заключалась просто в том, что я пытался получить доступ к сайту по адресу
myserver.myintranet.com/mysite
но привязка веб-сайта для http в IIS не имела имени хоста, указанного в привязке. Это работало раньше, и я понятия не имею, как это было унесено.
однажды я поставил myserver.myintranet.com
в имя хоста 404 исчез.
в Диспетчере IIS вы входите в привязки... на панели действия измените привязку http, чтобы указать имя хоста.
основываясь на этом так что ответ, мне просто нужно было переодеться path="*."
to path="*"
для добавил ExtensionlessUrlHandler-Integrated-4.0
на configuration>system.WebServer>handlers
в своем web.config
перед:
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
после:
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
имел ту же проблему, ответ 404 для контроллеров веб-api, когда служил из IIS, но все работало нормально с VS2010. Ни одно из вышеперечисленных решений не сработало для меня. В конце концов я обнаружил, что проблема заключалась в том, что мы добавили поддержку WSE 3.0 для приложения и Microsoft.Сеть.Services3 dll отсутствовал в каталоге /bin приложения. Странно, но после копирования dll отображение маршрута начало работать.
какой HTTP-запрос вы делаете?
Это немного левый ответ, но вы пытались удалить страницу ошибки IIS по умолчанию для 404, чтобы проверить, что ваш API фактически возвращает?
У меня была проблема, из-за которой я хотел, чтобы метод контроллера вернул 404, когда я отправил ему неправильный идентификатор. Я обнаружил, что всегда получаю страницу IIS 404 "файл или каталог не найден", а не HTTP-ответ от моего API. Удаление страницы ошибки 404 по умолчанию решить проблему.
другая проблема, но вы никогда не знаете, что это может помочь;)
эта часть конфигурации в интернете.файл config может помочь, как помогли мне: в системе.раздел веб-сервера:
<security>
<requestFiltering>
<verbs applyToWebDAV="true">
<remove verb="PUT" />
<add verb="PUT" allowed="true" />
<remove verb="DELETE" />
<add verb="DELETE" allowed="true" />
<remove verb="PATCH" />
<add verb="PATCH" allowed="true" />
</verbs>
</requestFiltering>
</security>
недавно у меня была ошибка 404 не найдена со всеми моими маршрутами/контроллерами Web Api 2. Поэтому я пошел на фактический сервер и попытался просмотреть с помощью localhost вместо имени хоста и получил "404.7 не найден - модуль фильтрации запросов настроен на запрещение расширения файла".
он разрешился для меня, когда я включаю флажок для UrlRoutingModule-4.0:
диспетчер IIS > модули > выберите UrlRoutingModule-4.0 > изменить модуль > установите флажок "вызывать только для запросов ASP.NET приложения или управляемые обработчики".
У меня была та же проблема: на недавно установленной машине с Visual Studio 2013 проект web api работал под IISExpress, но не под локальными IIS. Я пробовал все, что мог найти, но в конце концов проблема не была необходима с Web API, но с MVC: даже он был установлен, проект MVC не работал.
Что сработало для меня, так это удалить IIS (из добавления/удаления функций Windows), затем переустановить его, а затем запустить aspnet_regiis-i. Может, это кому-то поможет. еще.
Я потратил много времени, пытаясь много вещей, чтобы, наконец, понять, что я добавлял свое веб-приложение не на сайтах/веб-сайтах по умолчанию, а на другом веб-сайте, привязанном к другому порту. Очевидно, что попытка localhost на порту 80 даст 404.
Я ничего не делаю, просто добавить этот тег в web.config, его работа этот вопрос возникает один из следующих моментов
использовать Web Api в том же проекте с помощью MVC или asp.net формы
используйте RouteConfig и WebApiConfig в глобальном.эйсакс как GlobalConfiguration.Настроить(WebApiConfig.Реестр); RouteConfig.RegisterRoutes (RouteTable.Маршруты);
используйте RouteConfig для 2 целей, asp.net формы, использующие с friendlyurl и маршрутизация mvc для маршрутизации MVC
мы просто используем этот тег в web.конфига, он будет работать.
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
.........................
</modules>
</system.webServer>
столкнулся с той же проблемой с веб-API и .Net Core Web API. Работал нормально в VS 2017 во время отладки, но вернулся 404 при публикации в IIS 7.5. Решением для меня было изменить способ создания сайта. Вместо публикации в корневом каталоге веб-сайта (созданный щелчком правой кнопки мыши сайты...Добавить веб-сайт), мне пришлось создать приложение (созданное щелчком правой кнопкой мыши на веб-сайте...Добавить приложение) и опубликовать в этой папке. Обратите внимание, что для основной версии мне пришлось изменить пул приложений Параметр версии .NET Framework "нет управляемого кода".
Я тоже боролся с этим. Моя точная проблема заключалась в том, что у меня был веб-сервис ASMX, который, когда я ввел параметр в веб-метод и протестировал его, он дал бы мне 404. Этот метод прекрасно работал в прошлом и не был изменен, только переиздан. Затем я попал сюда и попробовал все опубликованные ответы, и ничего не помогло.
мое окончательное решение? Я знаю, что это радикально, но я только что создал новое решение Visual Studio и веб-проект. Выбранный MVC, затем я сделал "Добавить" > "новый элемент", выбрал" Visual C# " > " Web "и" Web Service (ASMX) " под этим. Я скопировал весь свой старый код, затем отметил пространство имен, которое он дал новому файлу в моем новом проекте, затем вставил весь мой старый код в новый файл кода в новом проекте и вернул пространство имен к тому, чем оно было. Затем я создал свои папки в своем проекте, который у меня был до использования Visual Studio, чтобы сделать "добавить" > "Новая папка", а затем скопировал обратно в Мои файлы в папки из моего другого проекта с помощью Проводника Windows, затем щелкните правой кнопкой мыши каждую папку в Visual Studio и "добавить" > "существующий элемент..."и вытащил элементы в этих папках в папки Visual Studio моего нового проекта. Я снова ссылался на все свои .NET-сборки, открыв оба проекта, чтобы сравнить, на какие из них я ссылался ранее (у меня была тонна!). Я должен был назвать свой новый проект немного другим - в основном я сделал что-то сопоставимое с "GeneralWebApp" вместо "MyWebApp", для пример-поэтому мне пришлось сделать "заменить все" во всем моем решении, чтобы заменить это имя, чтобы получить правильное пространство имен для всех моих файлов. Затем я сделал " перестроить все "в проекте, а затем запустил его с помощью кнопки" Play " Visual Studio, когда я получил ее для правильной сборки. Сработало отлично. Поэтому я опубликовал его, и все было хорошо на сервере, где я опубликовал его, когда я запустил его оттуда. У меня нет объяснений тому, что произошло, но так я это пережил. Это неплохой тест. просто чтобы увидеть, если что-то Visual Studio делает испортил его.