ASP.NET MVC网页无法加载,显示“找不到该资源”的错误信息。

37

我遇到了问题,当我尝试打开我的ASP.NET MVC应用程序时,我得到了ASP.NET错误页面,上面写着:

服务器错误 '/' 应用程序。

资源无法找到。描述:HTTP 404。您要查找的资源(或其某个依赖项)可能已被删除、更改名称或暂时不可用。请检查以下URL,并确保其拼写正确。

请求的URL: /EventScheduler/account.aspx/login

版本信息:Microsoft .NET Framework 版本:2.0.50727.3053;ASP.NET 版本:2.0.50727.3053**

我正在使用此博客帖子中的URL技巧,这就是为什么在URL中有.aspx的原因:

http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

在我的另一个沙盒服务器上它可以工作(不是开发机),现在我刚刚将其部署到我的生产站点作为新的虚拟目录,但由于某种原因它似乎实际上正在寻找一个.aspx文件。

有什么想法吗?我想我一定忘记了一步。

23个回答

18

在构建时我遇到了相同的错误。默认情况下,使用URLRoute设置进行导航。如果您通过右键单击任何cshtml页面选择“设置为启动页”属性,则会抛出此错误,因为在Global.asax文件下始终有一个路由到当前页面。

查看项目属性中的启动路径并将其删除。


15

我找到了解决这个问题的方法,你不需要删除global.asax文件,因为它包含了一些对你的项目顺利运行很有价值的信息,相反,看看你的控制器的名称,在我的情况下,我的控制器的名称类似于MyController.cs,而在global.asax文件中,它正在尝试引用一个名为“Home Controller”的控制器。

在global.asax文件中查找以下内容:

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

在我的情况下,我必须像这样工作才行。

    new { controller = "My", action = "Index", id = UrlParameter.Optional }

7

确保不要让IIS在提供文件之前检查文件是否存在。这个问题已经让我吃过几次亏了。请按照以下步骤操作:

打开IIS管理器。右键单击您的MVC网站,然后单击属性。打开虚拟目录选项卡。点击配置按钮。在通配符应用程序映射下,确保您有一个映射到c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll的映射。请确保“验证文件是否存在”未被勾选!


2
是的,它确实如此。最小字符长度很糟糕。 - user1228
2
我尝试了这个,但是Windcard应用程序地图不在那里。我添加了一个新的,确保取消选中“验证文件是否存在”的复选框,但我仍然遇到同样的问题。 - skb
1
它不在那里?听起来你需要做一些配置IIS的工作。不幸的是,这可能会很麻烦。我建议你回到配置MVC的IIS教程中,按步骤进行。问题在MVC之外;如果不是这样,你会收到有关无法找到路由或其他黄色死亡屏幕的错误。 - user1228
1
当我右键单击网站时,我只有基本设置或高级设置,没有“属性”。找不到它。我应该去哪里找?(IIS 7.5) - JNF
@JNF:这个答案是针对6而不是7的。在7中,通常不需要做任何事情来支持无扩展名的路径。这很可能是一个配置问题。在serverfault上询问一下。或者更有可能的是,删除角色,然后使用http://www.microsoft.com/web/downloads/platform.aspx来正确安装所有内容。糟糕的服务器配置是解决起来非常困难的噩梦。 - user1228
@Will,显然连7都有问题。我终于在这里找到了我需要的东西(是的,配置):https://dev59.com/vnTYa4cB1Zd3GeqPwpkq#17719424 - JNF

5

您应该仔细检查您的路由值。

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

在这种情况下,请确保您的控制器“Home”存在,否则应用程序将无法加载HomeController with Index Action。在我的情况下,我有HomesController,但我错过了Home前面的“s”。我修复了名称不匹配的问题,并解决了我的本地环境和服务器上的问题。

4

如果您正在运行IIS 6或更高版本,请确保您的MVC应用程序使用的应用程序池设置为集成托管管道模式。我错误地将我的设置为经典模式,结果发生了相同的错误。


6
您的意思是指IIS7及以上版本。在IIS 6.0中,我找不到选择Classic或Integrated Managed Pipeline模式的任何地方。 - modernzombie

3
页面未找到,因为相关控制器不存在。只需创建特定的控制器即可。如果您要显示主页并使用Visual Studio 2015,请按照以下步骤操作:
  1. 右键单击Controller文件夹,然后选择添加>控制器;
  2. 选择MVC 5控制器 - 空白;
  3. 点击添加;
  4. 将HomeController作为控制器名称;
  5. 构建项目,然后再次运行项目
我希望这可以帮助您。

2

需要确保两件事情:

1) Global.ascx文件中的Route应该正确。

2) 不要忘记在Web Project中添加Controller Project的引用(视图与控制器分别位于不同的项目中)。

第二个是我的情况。


1
我在构建MVC应用程序时遇到了相同的错误。
在我的情况下,这是因为我忘记在控制器名称中添加字符串"Controller"。

错误信息

public class ProductType : BaseController
{
    public ProductType()
    {
    }
}

已解决

public class ProductTypeController : BaseController
{
    public ProductTypeController ()
    {
    }
}

1
在您的项目中打开Global.asax.cs,然后右键单击方法RouteConfig.RegisterRoutes(RouteTable.Routes),然后单击Go To Definition, 然后在defaults: new { controller = "Home", action = "Index", id =UrlParameter.Optional}处将“Home”的名称更改为您自己的控制器名称,“Index”更改为您自己的视图名称,如果您已更改名称,则不是“HomeController”和“Index” 希望您的问题得到解决。

1

我曾经遇到过同样的问题,原因是虚拟目录文件夹中缺少了web.config文件。


你能说得清楚一点吗?我也遇到了同样的问题。 - JohnIdol
当应用程序在IIS中发布时,web.config文件未被复制,这导致了“找不到资源错误”的生成,如果您考虑消息,这是有道理的。 - gabouy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接