我正在尝试将我的站点的根路由到我的默认控制器的索引操作。 虽然我认为这是非常基本的,但相关的问题似乎都没有解决我的问题。
我试过了
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>
答案 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。
希望这可以帮助某人。