IIS 8 - Документ по умолчанию - ресурс не найден

Я пытаюсь понять, почему мой документ по умолчанию не появляется, когда я просматриваю виртуальный каталог. Если я перейду на сайт, как я должен это сделать, я получаю следующее:

enter image description here


Однако, если я добавлю страницу в URL-адрес, она появится:

enter image description here


Один SO ответ предложил удалить все документы по умолчанию (в IIS), кроме реального. Я попробовал это (изображение ниже), но это не помогло.

enter image description here


Почему IIS не будет обслуживать эту страницу при использовании корневого URL (http://localhost/SignalRChat)?

Это соответствующая часть web.config после удаления документов по умолчанию:

<defaultDocument>
    <files>
        <remove value="default.aspx" />
        <remove value="iisstart.htm" />
        <remove value="index.html" />
        <remove value="index.htm" />
        <remove value="Default.asp" />
        <remove value="Default.htm" />
        <add value="ChatPage.cshtml" />
    </files>
</defaultDocument>

Это раздел обработчиков:

<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*."
       verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
       modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll"
       preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*."
       verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
       modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll"
       preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*."
       verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler"
       preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

Ответ 1

Другая возможная причина ошибки 404, когда ваш запрос не указывает на конкретное имя файла в конце URL-адреса, заключается в том, что ваши правила фильтрации запросов IIS отклоняют запросы без расширения.

Чтобы точно знать это, выведите подкод ошибки 404. Обычно это 404,7, но могут быть некоторые изменения,

Кроме того, вы можете попробовать разрешить запросы без расширения без ограничений, добавив <add fileExtension="." allowed="true" /> к вашему web.config, как показано ниже:

  <system.webServer>
    <security>
      <requestFiltering>
        <fileExtensions>
          <add fileExtension="." allowed="true" />
        </fileExtensions>
      </requestFiltering>
    </security>
  </system.webServer>

Пожалуйста, дайте мне знать, если это помогло или сообщило вашу точную ошибку 404 с помощью субкода.

Ответ 2

Из ваших тегов похоже, что вы используете MVC и представление с помощью механизма просмотра бритвы (cshtml). В MVC URL-адрес не сопоставляется непосредственно с документом. Поэтому обсуждение не должно касаться документов по умолчанию, обработчиков и конфигурации IIS.

URL-адрес должен соответствовать определенному маршруту, который вызывает действие на контроллере. Это действие затем отобразит представление (*.cshtml).

Попробуйте исправить маршруты, чтобы иметь возможность обрабатывать запрос. Если вам нужна дополнительная помощь, вы должны уточнить свой вопрос с дополнительной информацией о контроллере и маршрутах.

Ответ 3

Вы можете создать веб-сайт/приложение установщика. он имеет возможность установить начальную страницу.

Поэтому установите ChatPage.cshtml в качестве начальной страницы в установщике и после установки, если вы наберете localhost/SignalIRChat

вы увидите содержимое ChatPage.cshtml без указания имени "ChatPage.cshtml" в адресной строке.

Он решит вашу проблему.

Ответ 4

Вам нужно добавить этот Handler в конце раздела handlers:

<add name="StaticFile" path="*" verb="*" type="" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" scriptProcessor="" resourceType="Either" requireAccess="Read" allowPathInfo="false" preCondition="" responseBufferLimit="4194304" />

Update:

Так как файлы .cshtml заблокированы по умолчанию, вам необходимо:

    <handlers>
        <remove name="cshtml-ISAPI-4.0_64bit" />
        <remove name="cshtml-ISAPI-4.0_32bit" />
        <remove name="cshtml-Integrated-4.0" />
        <remove name="cshtm-ISAPI-4.0_64bit" />
        <remove name="cshtm-ISAPI-4.0_32bit" />
        <remove name="cshtm-Integrated-4.0" />
    </handlers>

    <staticContent>
        <mimeMap fileExtension=".cshtml" mimeType="text/html" />
    </staticContent>

Удалите обработчик StaticFile (если он еще есть).

Ответ 5

Это может быть проблема MVC.

Вам может понадобиться перенаправление от индекса к этому другому действию в вашем контроллере SignalRChat.
Что-то вроде этого:

public ViewResult Index()
{
    return View("ChatPage");
}

Ответ 6

Кажется, что ваш просмотр в каталоге отключен в IIS. Просто включил просмотр каталогов в вашем IIS. он решит вашу проблему.

посетите http://technet.microsoft.com/en-us/library/cc731109%28v=ws.10%29.aspx для более подробной информации.

Надеюсь, это поможет.