1

为什么第一条路线被第二条跳过?第一条路线具有第二条路线的基本控制器类,因此小部件继承了事件,但我的事件“注册”方法不断受到打击。

网址

Widgets/v1/RegistrationWidget?eventid=3762

路线

routes.MapRouteLowercase(
                "DefaultWidget",
                "widgets/v{version}/{action}widget",
                new { controller = "Widgets", action = "NotFound", version = 1, slug="event" },
                new { version = @"\d+" }
            );

        routes.MapRouteLowercase(
          "NamedEvent",
          "{Id}/{slug}/{action}",
          new { controller = "Event", action = "Index", slug = "event" },
          new { Id = @"\d+" }
        );

小部件控制器

public partial class WidgetsController : EventController
    {
    public virtual ActionResult RegistrationWidget(int version, int? eventId, string slug, int? divisionTeamId = null, int? divisionId = null)
    {
        return GetRegistration(eventId, divisionId, divisionTeamId, new WidgetRegistrationViewModel(version));
    }

事件控制器

public partial class EventController : SiteController
    {
    public virtual ActionResult Registration(int? id, string slug, int? divisionTeamId = null, int? divisionId = null)
    {
        return GetRegistration(id, divisionTeamId, divisionTeamId, new EventRegistrationViewModel());
    }
4

2 回答 2

3

根据您的 urlWidgets/v1/RegistrationWidget?eventid=3762操作名称将计算为Registration,而不是RegistrationWidget您期望的那样,因此 mvc 实际上使用第一个路由但将其转发到基类方法。

于 2013-05-21T03:54:20.907 回答
0

无论您放在大括号之间的是什么,路由引擎都将使用它来尝试查找您正在寻找的操作,因此,由于您正在请求 RegistrationWidget 并且您的路由设置为 {action} 小部件,因此路由引擎将查找一个操作在 WidgetsController 类中命名为 Registration。这以前也让我绊倒过。

于 2013-05-21T04:40:25.453 回答