Использовать пользовательский обработчик маршрута с атрибутом маршрутизации MVC5

Используя библиотеку AttributeRouting, я смог настроить атрибутную маршрутизацию для использования собственного обработчика маршрута (наследование MvcRouteHandler):

routes.MapAttributeRoutes(cfg =>
    {
        cfg.UseRouteHandler(() => new MultiCultureMvcRouteHandler());
    }
);

Кроме того, до MVC5 можно было изменить обработчик маршрута любого существующего маршрута:

(routes["myroute"] as Route).RouteHandler = new MyCustomRouteHandler();

С MVC5, использующим атрибут маршрутизации, коллекция маршрутов содержит внутренние классы (RouteCollectionRoute например) и не представляется возможным изменить маршрут RouteHandler имущество.

Как я могу изменить обработчик маршрута по умолчанию, используемый при работе с маршрутизацией атрибутов в MVC5.1?

1 ответ

Создайте свой собственный атрибут RouteAttribute.

Проверьте документы здесь: http://msdn.microsoft.com/en-us/library/system.web.mvc.routeattribute(v=vs.118).aspx

Реализуйте эти интерфейсы, и в методе CreateRoute вы можете выбрать обработчик маршрута для объекта RouteEntry.

Я не пробовал это, но что-то вроде ниже, вам нужно сделать еще немного работы, но это должно поставить вас на правильный путь.

public class MyRouteAttribute : Attribute, IDirectRouteFactory, IRouteInfoProvider
{
    public RouteEntry CreateRoute(DirectRouteFactoryContext context)
    {
        return new RouteEntry("Test", new Route("Url", new CustomRouteHandler()));
    }

    public string Name
    {
        get { throw new NotImplementedException(); }
    }

    public string Template
    {
        get { throw new NotImplementedException(); }
    }
}
Другие вопросы по тегам