IIS 8 - 默认文档 - 找不到资源

时间:2013-06-01 20:12:25

标签: asp.net .net asp.net-mvc-4 iis iis-8

我正在尝试理解为什么在浏览虚拟目录时我的默认文档没有出现。如果我像我应该的那样浏览网站,我就明白了:

enter image description here


但是,如果我将网页添加到网址,则会显示:

enter image description here


一个SO answer建议删除除真实文档之外的所有默认文档(在IIS中)。我试过了(图片如下),但没有帮助。

enter image description here


使用根URL(http://localhost/SignalRChat)时,为什么IIS不会提供该页面?

这是删除默认文档后的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>

6 个答案:

答案 0 :(得分:2)

当您的请求未指向URL末尾的特定文件名时,404错误的另一个可能原因是您的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错误,请告诉我。

答案 1 :(得分:1)

从您的标签看起来您使用MVC和使用剃刀视图引擎(cshtml)的视图。在MVC中,URL不直接映射到文档。所以讨论不应该是关于默认文档,处理程序和IIS配置。

URL必须与定义的路由匹配,该路由会在控制器上调用操作。然后,此操作将呈现视图(* .cshtml)。

尝试修复您的路线以便能够处理请求。如果您需要更多帮助,您应该使用有关控制器和路线的更多信息更新您的问题。

答案 2 :(得分:0)

您可以创建一个网站/应用程序安装程序。它可以选择设置启动页面选择。

因此,将ChatPage.cshtml设置为安装程序中的启动页面,安装后如果键入localhost / SignalIRChat

您将看到ChatPage.cshtml的内容,而不会在地址栏中显示“ChatPage.cshtml”名称。

它将解决您的问题。

答案 3 :(得分:0)

您需要在Handler部分的末尾添加此handlers

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

<强>更新

由于.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处理程序(如果仍然存在)。

答案 4 :(得分:0)

这可能是一个MVC问题。

您可能需要在SignalRChat控制器中将索引重定向到此其他操作。
如下所示:

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

答案 5 :(得分:-4)

似乎您的目录浏览在IIS中被禁用。刚刚启用了IIS中的目录浏览。它会解决你的问题。

访问http://technet.microsoft.com/en-us/library/cc731109%28v=ws.10%29.aspx了解详情。

希望这会有所帮助。