首页 > 解决方案 > 为什么我的 IIS 默认文档找不到 MVC

问题描述

我知道这里有一百万个类似/相同的问题(我知道是因为我已经阅读过它们),但我就是不知道为什么我的默认文档没有显示。它曾经; 如果我启用默认网站,则会显示该网站的默认页面。HTTP 错误代码是 404。

编辑:是因为我使用的是“localhost”还是顶级域?那是https://localhost/MyDefault.html有效,但我从https://localhost得到 404 。

我相信/猜测以下内容是问题所在。它曾经工作过:-

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <defaultDocument enabled="true">
      <files>
        <clear />
        <add value="MyDefault.html" />
      </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>
  </system.webServer>

我一直在寻找 2 天然后遇到了我认为是解决方案的方法,但遗憾的是(听起来很合适)它不起作用:-(

仅供参考,这是一个 SPA/PWA,当我说 mvC 时,它实际上只是控制器。

这是 Global.asax 部分。

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("");

        routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
             );

    }
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

没有可用的 HOME 控制器。

这是返回的标准错误页面: - '/' 应用程序中的服务器错误。无法找到该资源。说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

请求的网址:/

版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.8.3752.0

没有在 FRL 中创建文件

失败的请求记录

IIS 日志记录

这是 404 错误: - 2019-12-04 03:55:34 ::1 GET / - 443 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+ (KHTML,+like+Gecko)+Chrome/78.0.3904.108+Safari/537.36 - 404 0 0 4

这是 FRT 请求摘要。完整的跟踪可以在 Complete FRT 中找到

在此处输入图像描述

[4]:

标签: iismodel-view-controllersingle-page-applicationprogressive-web-appsdefault-document

解决方案


我的回复太长了,无法在评论中发表。我查看了您的日志并注意到 404 来自 asp.net 托管管道。静态文件处理程序甚至没有参与此请求。

所以我认为您的项目或无扩展处理程序 ExtensionlessUrlHandler-Integrated-4.0 可能有问题。 在此处输入图像描述

首先,我们需要检查 routes.ignoreroute 在 Visual Studio 中是否正常工作。即使项目的根文件夹中没有 Mydefault.html,您是否得到了 403.14?

因为我注意到您正在 RouteConfig.RegisterRoutes(RouteTable.Routes)global.asax 中注册,但您没有将其包含在RouteConfig课程中。我习惯于创建单独的 Route.config 来存储路由表。

如果它在 VS 中运行良好,您是否尝试过清理根文件夹中的所有发布文件并通过 VS 部署工具重新发布?您在 IIS 管理器处理程序映射中看到静态文件处理程序了吗?此外,请检查您的应用程序池身份和 IUSR 是否有权访问您网站的根文件夹。由于这不是典型的 404 错误,我们可能需要逐步排除故障。

编辑: 在此处输入图像描述


推荐阅读