MVC3,ASP.NET 4 - 无法找到资源.

ttm*_*ttm 4 asp.net-mvc-3

我有VS2010,MVC3和ASP.NET 4.0,带有一个简单的测试mvc应用程序.问题是我仍然一直收到错误:

'/'应用程序中的服务器错误.

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

请求的网址:/ Pizzas/Pizza

这是我的简单控制器:

public class PizzasController : Controller
{
public ActionResult Pizza()
{
var pizzas = new Pizza();
return View("Pizza", pizza);
}

}
Run Code Online (Sandbox Code Playgroud)

这是我的global.asax的一部分:

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

        routes.MapRoute(
          "Pizza_1",
          "Pizzas/Pizza",
          new { controller = "Pizzas", action = "Pizza"}

      );

        routes.MapRoute(
            "Pizzas_2", // Route name
            "{controller}/{action}", // URL with parameters
            new { controller = "Pizzas", action = "Pizza" } // Parameter defaults
        );

        }
Run Code Online (Sandbox Code Playgroud)

我试图通过这种方式从pizza.cshtml调用此操作:

@Html.ActionLink("Test", "Pizza", "Pizzas");
Run Code Online (Sandbox Code Playgroud)

当这两条路线都未通过时,执行将转到Pizza_2路线并且它会毫无问题地通过.但是如果我注释掉Pizza_2,那么它会转到Pizza_1并且在没有进入action方法的情况下会发生错误.该应用程序在ASP.NET开发服务器(而不是IIS)上运行.我注意到只有在没有指定完整URL时才能使用Pizza_2路由: http:// localhost:2893

但是如果输入这样的完整URL: http:// localhost:2893/Pizzas/Pizza

错误再次发生.

Gor*_*vic 5

去掉

    routes.IgnoreRoute("{Scripts}/{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)

根据http://msdn.microsoft.com/en-us/library/cc668201.aspx#url_patterns {Scripts}被解析为参数.

如果你想为脚本做直通,你应该使用

    routes.IgnoreRoute("Scripts/{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)