1

最初のルートが 2 番目のルートでスキップされるのはなぜですか? 最初のルートには 2 番目のルートの基本コントローラー クラスがあるため、ウィジェットはイベントを継承しますが、イベントの「登録」メソッドがヒットし続けます。

URL

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

あなたのURLによると、Widgets/v1/RegistrationWidget?eventid=3762アクション名は期待どおりでRegistrationはなくとして計算されるため、mvcは実際には最初のルートを使用しますが、それを基本クラスのメソッドに転送します。RegistrationWidget

于 2013-05-21T03:54:20.907 に答える
0

中かっこの間に入れるものは何でも、探しているアクションを見つけようとするためにルート エンジンによって使用されるものです。RegistrationWidget を要求していて、ルートが {action}widget に設定されているため、ルーティング エンジンはアクションを探します。 WidgetsController クラスの Registration という名前です。これは以前にも私をつまずかせました。

于 2013-05-21T04:40:25.453 に答える