为什么找不到我的 IIS 默认文档 MVC

Why is my IIS default document not found MVC

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

编辑:是因为我使用的是 "localhost" 还是顶级域名?即https://localhost/MyDefault.html works but I get a 404 from https://localhost.

我believe/guess以下是问题所在。它曾经有效:-

  <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 天然后遇到了我认为是 solution 但遗憾的是(听起来很合适)它不起作用:-(

仅供参考,这是一个 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 控制器。

This is the standard error page returned: - Server Error in '/' Application. The resource cannot be found. Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

Requested URL: /

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.8.3752.0

没有在 FRL 中创建文件

这是 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]:

我的回复太长了所以我不能post评论。我查看了您的日志并注意到 404 来自 asp.net 托管 pipeline.And 静态文件处理程序甚至没有参与此请求。

所以我认为您的项目或无扩展处理程序 ExtensionlessUrlHandler-Integrated-4.0 可能有问题。

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

因为我注意到您在 global.asax 中注册了 RouteConfig.RegisterRoutes(RouteTable.Routes) 但您没有将其包含在 RouteConfig class 中。我习惯单独创建Route.config来存放路由table.

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

编辑: