Почему эта маршрутизация MVC не работает? - PullRequest
1 голос
/ 14 октября 2011
        //standard routing
        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
        );

        //the custom route I added
        routes.Add(
           new Route("Fish/Image",

               new ImageHandlerRouteHandler()
           )
        );

Я думал, что это будет использовать мой ImageHandlerRouteHandler, но все, что я получаю на Fish/Image, это 404.

Ответы [ 3 ]

8 голосов
/ 14 октября 2011

Добавить маршрут до маршрута по умолчанию.

routes.Add(
           new Route("Fish/Image",

               new ImageHandlerRouteHandler()
           )
        );

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

Запрос сопоставлен с первым соответствующим маршрутом в таблице маршрутов.Поскольку маршрут по умолчанию не имеет ограничений, он вызывается перед вашим пользовательским маршрутом.

3 голосов
/ 14 октября 2011

Если у вас есть маршрут Fish/Image перед маршрутом по умолчанию, проблема, с которой вы будете сталкиваться при создании ссылок MVC, заключается в том, что маршрут Fish / Image, по-видимому, удовлетворяет ВСЕ запросы. Чтобы этот маршрут работал, измените его следующим образом:

routes.Add(
    "FishImage",
    new Route(
        "{controller}/Image", 
        new RouteValueDictionary(new { controller = "Fish" }),
        new RouteValueDictionary(new { controller = @"^(?!fish).+"  }),
        null,
        new ImageHandlerRouteHandler() 
    ) 
);

Это меняет маршрут, так что на стороне построения ссылок другие ссылки не пройдут этот маршрут. В настоящее время MVC видит, что он может создать любую ссылку, соответствующую этому маршруту, что и делает. При ограниченном маршруте MVC теперь увидит, что другие ссылки не пройдут этот маршрут.

1 голос
/ 14 октября 2011

Порядок появления маршрутов важен.Сначала добавьте свой маршрут и оставьте По умолчанию как отступление.

...