ASP.Net MVC - 资源无法找到错误

时间:2012-02-15 12:53:27

标签: asp.net asp.net-mvc asp.net-mvc-3 razor

我是ASP.Net MVC的新手。我刚刚在Visual Studio 2010中创建了一个MVC3项目。视图引擎是剃须刀。当我刚运行应用程序时,它在浏览器中给出了正确的结果。网址为http://localhost:4163/。然后我将“设置为起始页”应用于〜\ Views \ Home文件夹中的Index.cshtml。然后,当我运行应用程序时,url变为http://localhost:4148/Views/Home/Index.cshtml并且它说无法找到资源。我该怎么做才能纠正它?网址映射在哪里?

Global.asax文件:

using System.Web.Mvc;
using System.Web.Routing;

namespace TEST
{

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

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

        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();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
    }
 }

21 个答案:

答案 0 :(得分:93)

URL映射或“路由”由ASP.NET MVC站点的根目录中的Global.asax处理。

单击“设置为起始页”时,它会更改项目设置以查找相对于应用程序根目录的文件。但是在MVC中,到索引页面的默认路径实际上是http://localhost:4163/Home/Index - 读取类似this的内容,以了解路由的工作原理。

要现在正在尝试(并且失败)直接导航到视图,“修复”您的项目,右键单击项目并选择“Properties”,单击“Web”选项卡并选择“Specific Page”,将文本框留空。现在,当你开始调试时,它应该再次转到主页 - 查看默认路由参数以查看为什么在Global.asax中的RegisterRoutes方法

答案 1 :(得分:24)

确保在控制器文件夹中创建了HomeController.cs类。

答案 2 :(得分:10)

在我遇到的类似问题中,我的Action有一个HTTP“POST”属性,但我试图打开页面(默认情况下它是“GET”)。

所以我必须创建一个HTTP“GET”版本。

答案 3 :(得分:6)

我也遇到了同样的html-404错误:

  

无法找到资源。说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。

但仔细检查后,我发现我将控制器的名称保留为Default1Controller,而不是将其更改为HomeController。当我进行更改并调试应用程序时,它工作。希望如果您遇到同样的问题,它会对您有所帮助。

答案 4 :(得分:5)

令人难以置信的是,我不小心从控制器中删除了公开关键字!

enter image description here

我想这对任何其他人来说都没有帮助,但你永远不会知道...

答案 5 :(得分:5)

按照以下步骤运行asp.net mvc应用程序。

  • 控制器创建
    右键单击controllers文件夹并添加控制器。 注意 - 不要删除Controller后缀。它的ASP.NET MVC约定。
    将控制器的名称命名为“DemoController”,您可以在“DemoController”中看到“Index”操作。当您创建控制器时,“索引”是默认操作。

  • 查看创建
    右键单击“索引”操作名称并保留 默认视图名称,即“索引”,然后单击“添加”按钮。

  • 路线设定
    打开Global.asax文件,然后您将看到route的默认设置 映射到“Home”控制器,“Index”操作将其更改为“Demo” 控制器和“索引”动作。 URL映射是用Global.asax编写的 文件。当您打开Global.asax文件时,您将看到以下设置:

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

    将其更改为:

    routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Demo", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    

运行您的应用程序,您可以看到您的应用程序正在运行。

答案 6 :(得分:4)

你不能在asp.net mvc中设置默认页面。
转到global.asax.cs并查看路由的定义。默认路由指向Index方法HomeController。
你最好看一些关于asp.net mvc的短片或试着找nerd dinner tutorial,这会让你很快熟悉这个框架。

我认为关于教程的最佳答案已经作为这个问题的答案提供:

ASP.NET MVC Quick Tutorials

答案 7 :(得分:2)

在asp.net mvc中,你不能使用选项'set as start page',因为mvc视图不是独立的,比如web表单页面。它只是用于显示模型的模板文件。他们没有处理http模块。所有Web请求都应通过控制器操作,您无法直接请求视图。

答案 8 :(得分:2)

前一段时间我使用VS 2012时遇到了类似的问题。 只需通过单击Build>重建应用程序即可解决;重建。

答案 9 :(得分:1)

如果您正在使用IIS Express。可能是您打开了另一个使用相同虚拟目录的项目。当您打开第二个解决方案时,VS将该IIS目录重新映射到另一个位置。结果它不会解决不同的问题。我有与主题启动器相同的错误。

要修复:关闭VS Studio的所有实例。打开VS与您正在工作的项目&重建。

答案 10 :(得分:1)

只需在此处添加此项 - 如果有人遇到主控制器上的索引页面不再加载的问题,可能是因为您尚未设置启动项目。右键单击您希望应用程序启动的项目并将其设置为启动项目,您应该很高兴。

答案 11 :(得分:1)

(MVC 5):将RouteConfig.cs更改为包含两个routes,如下所示:

            routes.MapRoute(
            name: "DefaultWithLanguage",
            url: "{language}/{controller}/{action}/{id}",
            defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional },
            constraints: new {language= "[a-z]{2}"}
        );

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

因此,当未指定路由的语言部分时,它不会将与正则表达式"[a-z]{2}"不匹配的控制器名称误认为并替换默认语言并重定向到路由的其余部分...

答案 12 :(得分:0)

我有一个名为usersController的控制器,所以我尝试通过将默认控制器从Home更改为usersController来创建它,如下所示。

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

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

解决方案是将控制器默认值更改为用户而不是usersController

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

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

答案 13 :(得分:0)

对我来说,问题是由命名空间问题引起的。

我已将我的项目命名空间从MyProject更新到MyProject.Web,但我忘记更新项目属性>>默认命名空间。因此,当我添加一个新的控制器时,它使用旧的命名空间。我所要做的就是更正新控制器中的命名空间并且它有效。

答案 14 :(得分:0)

我遇到了同样的问题,除了我没有为我的Index.cshtml使用名称View,我是以LandingPage.cshtml为例,我的问题是{{1}在我的控制器中,我的视图名称与我的视图名称不同(在这种情况下,我的ActionResult被称为Index()) - 这实际上是显而易见的并且是我自己的一个愚蠢的错误,但我是MVC的新手,所以我将失败这里和那里的基础知识。

所以在我的情况下,我需要将ActionResult更改为与ActionResult同名:View

LandingPage.cshtml

我是MVC的新手,所以也许这会帮助其他新人并为我做同样事情而苦苦挣扎。

答案 15 :(得分:0)

如果你已经尝试了上述所有解决方案并且问题仍然存在,那么请使用这个简单的解决方案。 从此link打开Facebook调试器,键入页面URL并单击“获取新的Scrape信息”按钮。这将解决您的问题。

背后的原因(我认为)是facebook api保存页面的当前状态并从其自己的服务器显示相同的内容。如果您在编码时单击共享按钮并且您的页面实际上没有上传,则facebook api无法在服务器上找到该页面并将页面状态保存为"未找到资源"。现在,即使您上传页面,它也会继续显示相同的消息。从facebook调试器获取页面时,它会从头开始解析所有内容并保存页面的当前状态,然后您的共享按钮开始工作而不会对编码进行任何更改。

答案 16 :(得分:0)

在浏览器输入的地址栏中,如下所示: ControllerName / ActionMethod 不输入ControllerName / ViewName 例如 在地址栏中:http://localhost:55029/test2/getview cshtml文件代码:

@{
Layout = null; 
}

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>MyView</title>
</head>
<body>
<div>            
</div>
</body>
</html>

和cs文件代码:

public ActionResult GetView()
{
return View("MyView");
}

答案 17 :(得分:0)

使用HomeController.cs的简单解决方案:

在Controllers文件夹下打开HomeController.cs文件。 添加代码:

public ActionResult Edit()
{
    return View();
}

现在,如果您使用的是其他控制器(而不是HomeController):

要查看您的视图:

http://localhost:1234/xyz/MyView

在xyzController.cs文件的Controllers文件夹下,

确保添加如下的ActionResult方法:

public ActionResult MyView()
{
    return View(myView); //pass in your view if you want.
}

当我没有正确引用我的模型名称时,我也收到了这条消息:

@using(Html.BeginForm(“MyView”,“MyModel”,FormMethod.Get))

答案 18 :(得分:0)

您可以更改项目属性(项目 - &gt;项目属性)内的起始页面。在网络标签下,您可以选择specify page并将起始页面更改为home/home/index。这将根据您的路线将您引导至正确的页面。 http://localhost:4148/Views/Home/Index.cshtml的地址不起作用,因为它是根据您的路线处理的,其中说明网址必须是http://localhost:4148/ {controller} / {action}和可选/ {id}。

如果您想了解有关路由的更多信息,请查看here.

答案 19 :(得分:0)

asp.net mvc项目的起始页面是“当前页面”的默认值。只需打开服务器端文件并启动项目即可。以这种方式,mvc打开默认控制器,它是项目的homecontroller

答案 20 :(得分:-2)

通过右键单击我想要的视图作为启动页面解决问题显示错误后#34;找不到您要查找的资源&#34;只需右键单击您的项目,转到Web并选择Current Page。这将解决问题

相关问题