Asp.net mvc 3 不正确的路由是ASP.NET MVC

Asp.net mvc 3 不正确的路由是ASP.NET MVC,asp.net-mvc-3,asp.net-mvc-routing,Asp.net Mvc 3,Asp.net Mvc Routing,我不知道为什么我在ASP.NET MVC路由方面会遇到这样的问题。我希望有一个工具能告诉我目前设置了哪些路线。不管怎样 在我的global.asax.cs文件中,我有以下内容: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "SignUp", // Route name

我不知道为什么我在ASP.NET MVC路由方面会遇到这样的问题。我希望有一个工具能告诉我目前设置了哪些路线。不管怎样

在我的global.asax.cs文件中,我有以下内容:

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

  routes.MapRoute(
    "SignUp", // Route name
    "account/{controller}/{action}", // URL with parameters
    new { controller = "Home", action = "Register" } // Parameter defaults
  );

  routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
  );
}
我在HomeController.cs中定义了以下内容

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

我希望能够通过在我的浏览器中访问/帐户/注册来访问此页面。然而,我继续得到一个404。我做错了什么?

/Account/Register
匹配您的第一条路线


单词
Register
{controller}
匹配,因此它会查找名为
RegisterController
/Account/Register
的控制器,该控制器与您的第一条路径匹配


单词
Register
{controller}
匹配,因此它会查找名为
RegisterController

的控制器,请尝试使用此nugget包
您可以在

上找到有关《一瞥》的更多信息,请尝试使用此nugget软件包 您可以在

替换上找到有关一瞥的更多信息

routes.MapRoute(
    "SignUp", // Route name
    "account/{controller}/{action}", // URL with parameters
    new { controller = "Home", action = "Register" } // Parameter defaults
  );

这意味着
/account/register
将路由到主控制器上的注册操作。这还意味着,通过
@Html生成的操作链接和其他链接。ActionLink(“注册”、“注册”、“主页”)
将生成URL
/account/Register

将“带参数的URL”视为URL匹配的模式

原始路线图的问题在于,它正在查找类似以下内容的URL
/account/controllername/actionname
。因此,当您转到
/account/register
-它将
register
作为控制器名称,并使用默认操作名称(在本例中为register)-并且由于“register”控制器中不存在“register”操作-您将获得404

已更新 我根据罗伯特的评论更新了我的建议路线

同样值得注意的是,正如Robert所说,通过制作一个“帐户”控制器,并将“注册”操作移到那里,整个过程可以变得更加简单。然后您可以删除“注册”路由,只使用默认路由。如果您仔细考虑过,您会同意这是一个比“主”控制器更好的“注册”操作的地方。

routes.MapRoute(
    "SignUp", // Route name
    "account/{controller}/{action}", // URL with parameters
    new { controller = "Home", action = "Register" } // Parameter defaults
  );

这意味着
/account/register
将路由到主控制器上的注册操作。这还意味着,通过
@Html生成的操作链接和其他链接。ActionLink(“注册”、“注册”、“主页”)
将生成URL
/account/Register

将“带参数的URL”视为URL匹配的模式

原始路线图的问题在于,它正在查找类似以下内容的URL
/account/controllername/actionname
。因此,当您转到
/account/register
-它将
register
作为控制器名称,并使用默认操作名称(在本例中为register)-并且由于“register”控制器中不存在“register”操作-您将获得404

已更新 我根据罗伯特的评论更新了我的建议路线


同样值得注意的是,正如Robert所说,通过制作一个“帐户”控制器,并将“注册”操作移到那里,整个过程可以变得更加简单。然后您可以删除“注册”路由,只使用默认路由。如果您仔细考虑过,您会同意,对于“注册”操作来说,这里比“主”控制器更好。

要实际使用
帐户/注册
他们应该删除默认操作值,因为否则只能从
帐户
访问注册。生成的URL中永远不会有register这个词。如果您手动编写URL,当然也可以。顺便说一句:我还建议(可能不是这样)避免在
HomeController
中执行帐户操作。最好把它放在别处<代码>会计控制器可能吗?在这种情况下,默认路由仍然适用,因为控制器的名称是account。。。这意味着OP极有可能过度复杂了它们的路由,而没有明显的好处。他们应该只使用默认路由和单独的控制器…要实际使用
帐户/注册
,他们应该删除默认操作值,否则注册只能从
帐户
访问。生成的URL中永远不会有register这个词。如果您手动编写URL,当然也可以。顺便说一句:我还建议(可能不是这样)避免在
HomeController
中执行帐户操作。最好把它放在别处<代码>会计控制器可能吗?在这种情况下,默认路由仍然适用,因为控制器的名称是account。。。这意味着OP极有可能过度复杂了它们的路由,而没有明显的好处。它们应该只使用默认路由和单独的控制器。。。