Страница 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 и более ранних версий:

  1. Запустите командную строку (cmd.exe), как администратор.
  2. перейдите в соответствующее расположение .NET Framework. (например, C:\Windows\Microsoft.NET\Framework64\v4.0.30319)
  3. выполните команду aspnet_regiis.exe-i

для Windows 8 и более поздние версии:

  1. в меню Пуск введите "включить или выключить Компоненты windows" и выберите первый результат.
  2. разверните Internet Information Services: World Wide Web Services: возможности разработки приложений и выберите ASP.NET 4.5 (или ASP.NET 3.5 если требуется поддержка проектов в .NET Framework 2.0-3.5).
  3. нажмите 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>


несколько вещей, чтобы проверить:

  1. убедитесь, что у вас установлен .NET Framework 4.
  2. убедитесь, что версия 4 .NET Framework выбрана для вашего веб-сайта и виртуального каталога (если применимо).
  3. убедитесь, что у вас установлен MVC или есть соответствующие библиотеки DLL в каталоге bin.
  4. возможно, потребуется разрешить ASP.NET 4.0 расширения веб-службы
  5. поместите приложение в собственный пул приложений.
  6. убедитесь, что в каталоге есть как минимум разрешения на выполнение "только скриптов".

У меня была похожая проблема. У меня правильные настройки в web.файл конфигурации, но запускал пул приложений в классический режим, а не встроенный режим

screen shot


эта проблема также может произойти из-за следующего

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 снова начали работать.


Мне пришлось отключить опцию публикации файла " Precompile во время публикации."


пожалуйста, убедитесь, что пул приложений в встроенный режим
И добавьте в 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 отображение маршрута начало работать.


Не забудьте развернуть global.асакс


какой 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, его работа этот вопрос возникает один из следующих моментов

  1. использовать Web Api в том же проекте с помощью MVC или asp.net формы

  2. используйте RouteConfig и WebApiConfig в глобальном.эйсакс как GlobalConfiguration.Настроить(WebApiConfig.Реестр); RouteConfig.RegisterRoutes (RouteTable.Маршруты);

  3. используйте 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 делает испортил его.