gpt4 book ai didi

asp.net-mvc - 为什么在我启动 ASP.NET MVC2 应用程序时调用了错误的 Controller ?

转载 作者:行者123 更新时间:2023-12-02 00:37:51 24 4
gpt4 key购买 nike

我有一个名为 MetricsController 的 Controller ,它只有一个操作方法:

public class MetricsController
{
public ActionResult GetMetrics(int id, string period)
{
return View("Metrics");
}
}

我想像这样将调用路由到这个 Controller :

http://mysite/metrics/getmetrics/123/24h

我在我的 Global.asax.cs 中映射了一条附加路由,如下所示:

routes.MapRoute(
"Metrics",
"{controller}/{action}/{id}/{period}",
new { controller = "Metrics", action = "GetMetrics", id = 0, period = "" }
);

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

我刚刚将其添加到 Visual Studio 2010 创建的默认模板项目中。

当我运行应用程序时,它不是默认使用 HomeController,而是从 MetricsController 开始。

为什么会这样?当我启动与 Metrics 路由中指定的 url 模式匹配的应用程序时,url 中没有任何内容。

这一切都在使用内置网络服务器的 Visual Studio 2010 中进行了尝试。

最佳答案

当然是因为它匹配第一个根。

事情是 - 当您提供默认值时 - 它们变成可选的。如果每个 routedata 值都是可选的并且 route 是第一个 - 它保证它会首先命中。

像这样的东西应该可以工作:

routes.MapRoute(
"Metrics",
"Metrics/GetMetrics/{id}/{period}",
//assuming id, period aren't supposed to be optional
new { controller = "Metrics", action = "GetMetrics" }
);

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

关于asp.net-mvc - 为什么在我启动 ASP.NET MVC2 应用程序时调用了错误的 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com