这似乎是一个已被多次询问/回答的问题。不是。
开发环境: VS 2012和MVC 4.我使用内置的IIS Express来运行应用程序。
直到昨天才发生此错误。它突然开始发生,我被卡住了。奇怪的是它只发生在一个场景中。
当我尝试访问http://localhost:49962/managescholars/
时,它会显示错误
HTTP Error 403.14 - Forbidden
The Web server is configured to not list the contents of this directory.
但是使用http://localhost:49962/managescholars/Index
可以正常工作。同一控制器的其他动作方法也可以正常工作。例如http://localhost:49962/managescholars/create
。所有其他控制器也可以正常工作。
我尝试将以下内容添加到web.config。
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true" />
<handlers/>
</system.webServer>
我也尝试以管理员身份运行以下命令
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir
但他们都没有奏效。
修改
我修改了我的路线。他们看起来如下。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "ManageScholarLectures",
url: "Manage/Lectures/{userFriendlyName}",
defaults: new { controller = MVC.ManageLectures.Name ,
action = MVC.ManageLectures.ActionNames.Index,
userFriendlyName = UrlParameter.Optional }
);
routes.MapRoute(
name: "ManageScholarEdit",
url: "Manage/Scholars/{userFriendlyName}",
defaults: new { controller = MVC.ManageScholars.Name,
action = MVC.ManageScholars.ActionNames.Edit }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = MVC.Home.Name,
action = MVC.Home.ActionNames.Index,
id = UrlParameter.Optional }
);
}
我正在使用T4MVC
模板。
即使我将默认路线留在底部并删除前两条路线,它仍然无效。我做错了什么?
非常感谢您的帮助。
答案 0 :(得分:58)
您的路线似乎很好。这不应该导致任何问题。该错误仅在http://localhost:49962/managescholars/
上发生,这意味着可能存在其他具有相同名称的资源。
您能否确保您的代码在执行期间不会错误地创建 managecholars 文件夹?“
答案 1 :(得分:3)
我遇到了同样的问题。解决很容易。
出现此问题是由于在项目设置中编辑保护URL中的属性时出现IIS Express冲突。 解决这个问题非常简单:
1 - 在“.vs \ config”目录中查找“applicationhost.config”文件。此文件夹位于解决方案的根目录下。您可以使用Notepad ++打开它
2 - 使用程序的“查找”搜索控件的名称(Ctrl + F)。就我而言,提出问题的控件是'办事处'。
3 - 删除为此类URL放置IIS设置的任何节点。见下面的例子:
<site name="G4.Admin(1)" id="8">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Projetos\PortalG4\src\G4.Admin" />
<virtualDirectory path="/Offices/Edit" physicalPath="C:\Projetos\PortalG4\src" />
<virtualDirectory path="/Offices" physicalPath="C:\Projetos\PortalG4" />
</application>
<application path="/Offices/Edit/2" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Projetos\PortalG4\src\G4.Admin" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:6920:localhost" />
</bindings>
</site>
您应该删除每个元素
<site name = "NAME_PROJECT" id = "X">
注意:在进行更改之前备份文件。
拥抱
答案 2 :(得分:1)
首先,我假设
http://localhost:49962/managescholars/
实际上是
http://localhost:49962/manage/scholars/
。如果不存在问题:)
我不是路线专家,但在Scholars
的路线中,userFriendlyName
参数不是可选的,这意味着http://localhost:49962/manage/scholars/
不会匹配任何一个您的规则和IIS会将其视为列出文件夹内容的请求。
答案 3 :(得分:1)
太棒了!! 在我的情况下,这是因为我将应用程序配置为在错误的URL中运行,但是当我返回到正确的URL时,外观并没有压倒applicationhost.config。
正如我上面所说,我只是设法解决了这些步骤。
答案 4 :(得分:0)
如果有人遇到同样的问题我会得到并且进入这个页面deseperatly。 如果调试网站有效但不在一个网站上:
检查global.asax上的修改 检查路由配置是否仍然存在......
我知道它很愚蠢,但在git合并后6小时就丢失了......
答案 5 :(得分:0)
我知道原始问题已得到解答,但我的案例中有以下问题。 我使用IIS Express在VS2013上遇到完全相同的问题。在我的情况下,访问/登录没有在LoginController中获取索引操作。我检查时没有物理文件夹,但经过多次挖掘,我发现在IIS Express for / Login路径上创建了虚拟目录,导致了这种情况。我从applicationhost配置(Documents \ IISExpress \ config)中删除了虚拟目录以解决问题。
答案 6 :(得分:0)
就我而言,使用Visual Studio 2015,我通过以下步骤解决了问题:
答案 7 :(得分:0)
您应该输入用户名/,如果未启用,请启用它。