Страница 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 ]

3 голосов
/ 29 февраля 2016

Есть официальное исправление от Microsoft: http://support.microsoft.com/kb/980368

Я настоятельно не рекомендую использовать . Это приводит к тому, что все запросы (даже .jpg, .css, .pdf и т. Д.) Будут обрабатываться всеми зарегистрированными модулями HTTP. Есть два отрицательных момента: а) дополнительная нагрузка на аппаратные ресурсы; б) потенциальные ошибки, так как модули http будут обрабатывать новый тип контента.

2 голосов
/ 29 октября 2015

В моем случае проблема заключалась в том, что я просто пытался получить доступ к сайту по адресу

myserver.myintranet.com/mysite

Но у привязки веб-сайта для http в IIS не было узлаИмя указано в привязке.Это работало раньше, и я понятия не имею, как это сорвалось.

Как только я ввел myserver.myintranet.com в имя хоста, 404 пропало.

В диспетчере IIS вы переходите на Bindings ... на панели действий, затем отредактируйте http-привязку, указав имя хоста.

2 голосов
/ 14 февраля 2015

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

2 голосов
/ 14 сентября 2012

Я начал получать 404 ответа от Web API после обучения Windows Azure, в котором говорилось, что мне нужно добавить файл «WebRole.cs» в мой проект.

После удаления «WebRole.cs» из моего проекта,мои вызовы Web API снова начали работать.

2 голосов
/ 03 сентября 2015

Убедитесь, что пул приложений находится в Интегрированном режиме
И добавьте в файл web.config следующее:

<system.webServer>
    .....
    <modules runAllManagedModulesForAllRequests="true" />
    .....
</system.webServer>
1 голос
/ 25 февраля 2013

У меня была такая же проблема: ответ 404 для контроллеров веб-API при обслуживании из IIS, но с VS2010 все работало нормально.Ни одно из вышеперечисленных решений не помогло мне.В конце концов я обнаружил, что проблема заключалась в том, что мы добавили поддержку приложения WSE 3.0, а в каталоге / bin приложения отсутствовала библиотека Microsoft.Web.Services3.Странно, но после копирования dll отображение маршрута начало работать.

1 голос
/ 27 ноября 2018

Для меня проблема заключалась в том, что корневой сайт был настроен на использование пула приложений .NET 2.0, и мое приложение на этом сайте было .NET 4.5.

Я создал новый сайт с приложением .NET 4пул и поместил мое приложение в корень этого - и это работало нормально.

1 голос
/ 28 марта 2016

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

1 голос
/ 13 марта 2018

Я тоже с этим боролся. Моя точная проблема заключалась в том, что у меня был веб-сервис ASMX, который, когда я вводил параметр в веб-метод и проверял его, давал мне 404. В прошлом конкретный метод работал нормально и не менялся только переиздан. Потом я попал сюда и перепробовал все ответы, и ничего не помогло.

Мое окончательное решение? Я знаю, что это радикально, но я только что создал новое решение Visual Studio и веб-проект. Выбрал MVC, затем я сделал «Add»> «New Item», выбрал «Visual C #»> «Web» и «Web Service (ASMX)» под этим. Я скопировал весь свой старый код с выделенным кодом, затем принял к сведению пространство имен, которое дало новый файл в моем новом проекте, затем вставил весь свой старый код в новый файл с выделенным кодом в новом проекте и поместил пространство имен вернуться к тому, что было.

Затем я создал свои папки в своем проекте, которые у меня были до того, как с помощью Visual Studio выполнить команду «Добавить»> «Новая папка», затем скопировал обратно мои файлы в папки из моего другого проекта с помощью проводника Windows, затем щелкнул правой кнопкой мыши каждая папка в Visual Studio и "Добавить"> "Существующий элемент ..." и перетащил элементы из этих папок в папки моего нового проекта Visual Studio. Я снова сослался на все свои сборки .NET, открыв оба проекта, чтобы я мог сравнить, на какие из них я ссылался ранее (их было несколько). Я должен был назвать свой новый проект немного по-другому - в основном я сделал что-то сравнимое с «GeneralWebApp» вместо «MyWebApp», например - поэтому мне пришлось сделать «Заменить все» во всем моем решении, чтобы заменить это имя, чтобы получить правильное пространство имен для всех моих файлов.

Затем я выполнил «Перестроить все» в проекте, а затем запустил его с помощью кнопки «Воспроизвести», которую выдает Visual Studio, когда я получил его для правильной сборки. Работало нормально. Поэтому я опубликовал его, и все было нормально на сервере, где я его опубликовал, когда я запускал его оттуда. У меня нет объяснения тому, что произошло, но вот как я прошел через это. Это не плохой тест, просто чтобы увидеть, не испортил ли что-то Visual Studio.

0 голосов
/ 22 декабря 2014

Это было решено для меня, когда я включаю флажок для UrlRoutingModule-4.0:

IIS Manager> Модули> выберите UrlRoutingModule-4.0> Изменить модуль> установите флажок "Вызывать только для запросов к ASP.NET приложения или управляемые обработчики ".

...