Использовать пользовательский обработчик маршрута с атрибутом маршрутизации 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(); }
}
}