ASP.NET MVC 4.5路由到根URL会导致HTTP错误403.14 - 禁止

时间:2014-07-23 14:37:03

标签: asp.net-mvc

我正在尝试将我的站点的根路由到我的默认控制器的索引操作。 虽然我认为这是非常基本的,但相关的问题似乎都没有解决我的问题。

我试过了

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            name: "Default", // Route name
            url: "{controller}/{action}/{id}", 
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );

    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            name: "Homepage",
            url: "",
            defaults: new { controller = "Default", action = "Index" }
        );
        routes.MapRoute(
            name: "Default", // Route name
            url: "{controller}/{action}/{id}", 
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );
    }

但是当我尝试在localhost上查看该网站时,两个都给我一个错误:57101 /按f5

  

HTTP错误403.14 - 禁止将Web服务器配置为不列出此目录的内容。

     

最有可能的原因:未配置默认文档   请求的URL,并且服务器上未启用目录浏览。

     

您可以尝试的事项:如果您不想启用目录浏览,   确保配置了默认文档并且文件存在。   启用目录浏览。转到IIS Express安装目录。   运行appcmd set config /section:system.webServer/directoryBrowse   / enabled:true表示在服务器级别启用目录浏览。跑   appcmd set config [“SITE_NAME”]   /section:system.webServer/directoryBrowse / enabled:如果启用,则为true   目录在站点级别浏览。验证   configuration /system.webServer/directoryBrowse@enabled属性是   在站点或应用程序配置文件中设置为true。

本地主机:57101 /默认 和localhost:57101 /默认/索引都正确路由到我的默认控制器的索引操作。只有根才能给我这个错误。

我正在使用带有内置Web服务器的VS 2013 Express。我只有一个控制器和动作。

这是我的web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
  <appSettings>
    <add key="vs:EnableBrowserLink" value="false"></add>

    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

2 个答案:

答案 0 :(得分:1)

这就是问题所在: 当我从模板创建项目时,在App_Start下有一个RouteConfig,它实际上被用来代替Global.asax中的RegisterRoutes方法。

以下是该文件中的内容

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { action = "Index", id = UrlParameter.Optional }
        );
    }
}

我将其更改为我的global.asax中的内容,并从global.asax

中删除了该方法
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );
    }
}

事实证明,我并不知道我的路线实际定义在哪里。我以为我将默认控制器设置为Default,因为它位于global.asax文件中,但实际上有一个文件覆盖了App_start / RouteConfig中的文件

答案 1 :(得分:0)

我遇到了同样的问题,但最终我的问题/解决方案在上述DavidG的评论中得到了描述-

您的路由看起来不错,这意味着可能还有其他冲突。您是否有一个名为default的文件夹/文件? – DavidG 2014年7月23日14:54

仅当查看Reports控制器的根目录时,我才得到403,但如果指定了视图,则不会。

因此,/ Reports将为403,/ Reports / WeeklyReport将正确返回。

问题根源是我有一个文件夹,用于在名为“报告”的应用程序的根目录下容纳生成的报告。我重命名了这个“额外的” Reports文件夹,而没有重命名为403。

希望这可以帮助某人。