Страница HTTP 404 не найдена в Web Api, размещенном в IIS 7.5 - PullRequest
91 голосов
/ 14 марта 2012

У меня есть приложение Web Api. Он отлично работает, когда я тестировал его на сервере отладки VS 2010. Но теперь я развернул его в IIS 7.5 и получаю ошибку HTTP 404 при попытке доступа к приложению.

Вот мой web.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>

Ответы [ 27 ]

86 голосов
/ 19 апреля 2012

Я тоже боролся с этим.К счастью, Стив Мичелотти задокументировал решение, которое работало для меня здесь .

В конце дня я включил все глаголы (глагол = "*") в 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 вызывает проблемы.К счастью, я тоже не сталкивался с этой проблемой.

53 голосов
/ 22 января 2013

Была такая же проблема.Этот параметр конфигурации решил проблему.

<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>
33 голосов
/ 29 сентября 2012

Если 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. Разверните Информационные службы Интернета: World Wide Web Services: Функции разработки приложений и выберитеASP.NET 4.5 (или ASP.NET 3.5, если вам требуется поддержка проектов в .NET Framework 2.0-3.5).
  3. Нажмите кнопку ОК.
25 голосов
/ 27 марта 2012

Запускаете ли вы приложение 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} на {controller}/{id} и ASP .NET MVC one Default от {controller}/{id} до info/{controller}/{id}.

14 голосов
/ 13 сентября 2013

Это единственный ответ, который сработал для меня ...

У меня была похожая проблема ... Казалось, что независимо от того, что я сделал, ничего не перенаправлялось, и мой глобальный файл просто игнорировался. Я серьезно подумал, чтобы просто все это закончить, прежде чем я нашел этот ответ. Я надеюсь, что эта ссылка поможет кому-то еще.


Добавление следующего в файл web.config работало для меня:

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>
Тег

system.webServer , конечно, уже был, но я добавил к нему тег modules и затем remove & add теги к модулю tag.

11 голосов
/ 14 марта 2012

Несколько вещей для проверки:

  1. Убедитесь, что у вас установлен .NET Framework 4.
  2. Убедитесь, что версия 4 .NET Framework выбрана для вашего веб-сайта.& виртуальный каталог (если применимо).
  3. Убедитесь, что у вас установлен MVC или есть соответствующие библиотеки DLL в каталоге bin.
  4. Возможно, необходимо разрешить расширения веб-службы ASP.NET 4.0
  5. Поместите приложение в его собственный пул приложений.
  6. Убедитесь, что у каталога есть хотя бы разрешения «Только сценарии» на выполнение.
9 голосов
/ 12 ноября 2014

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

screen shot

6 голосов
/ 17 ноября 2014

Эта проблема также может возникать из-за следующих действий:

1. В Web.Config

<system.webServer>
     <modules runAllManagedModulesForAllRequests="true" /> 
<system.webServer>

2. Убедитесь, что в папке bin на сервере, где находитсявеб-API развернут

  • System.Net.Http

  • System.Net.Http.Formatting

  • System.Web.Http.WebHost

  • System.Web.Http

Эти сборки не будут скопированы в папку binпо умолчанию, если публикация выполняется через Visual Studio, поскольку пакеты Web API устанавливаются через Nuget на компьютере разработчика.Тем не менее, если вы хотите, чтобы эти файлы были доступны как часть публикации Visual Studio, вам нужно установить для CopyLocal значение True для этих сборок

Sadish Kumar.V

5 голосов
/ 23 января 2016

Я тоже столкнулся с этой проблемой. Я решил проблему, перейдя в Пулы приложений> Имя пула приложений и изменил .NET Framework с версии v.2.0.50727 на v4.0.30319.

4 голосов
/ 13 ноября 2015

Исходя из этого SO ответа , мне просто нужно было изменить path="*." на 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" />
...